Unityゲームの作り方メモコインプッシャー

【Unity3D】コインプッシャーゲームの作り方③~プレイヤーが操作できるようにする

Unity

1. はじめに

みなさん、こんにちは!前回までで、コインを発射する仕組みを作り上げましたよね?でも、発射台を動かせなければ狙った場所にコインを打ち込むのは難しいですよね。

そこで今回の目標は、発射台をプレイヤーが自由に左右に動かせるようにすることです。これができれば、狙った位置にコインを落とせるようになり、ゲームがもっと面白くなります。また、狙いをつけるためのポインターも追加して、ゲームの操作感をさらに向上させていきましょう。

初心者の方でも簡単に実装できるよう、わかりやすくステップごとに解説していきます。それでは、さっそく始めましょう!



2. 発射台を見えるようにする

コインプッシャーゲームで重要な役割を果たす「発射台」を、プレイヤーが見やすい形に作成してみましょう。以前の記事で作成した「CreatePoint」の子オブジェクトとして3Dオブジェクト配置します。


手順 1: キューブを作成

まず、発射台を視覚的に表示するために、Unityの「キューブ」オブジェクトを使用します。

  1. ヒエラルキーウィンドウで、以前の記事で作成した「CreatePoint」を右クリックします。
  2. [3D Object] → [Cube] を選択します。
  3. 作成したキューブの名前を 「MovePoint」 に変更してください。

手順 2: Colliderを削除

次に、発射台が不要な物理的干渉を起こさないように、「Collider」コンポーネントを削除します。

  1. 「MovePoint」を選択した状態で インスペクター ウィンドウを確認します。
  2. Box Collider コンポーネントを探して右クリックします。
  3. [Remove Component] を選択して削除してください。

手順 3: サイズを調整

発射台が適切に表示されるようにサイズを調整します。以下の設定を参考にしてください。

  1. インスペクター で「Transform」の Scale を変更します。
    • X: 0.5
    • Y: 0.5
    • Z: 0.5
  2. 発射台の位置を調整して、コインが発射される場所に配置します。

これで、発射台がプレイヤーから見えるようになりました!次のステップでは、狙いをつけやすくするための「ポインター」を追加していきます。



3. ポインターを作成して狙いをつけれるようにする

コインプッシャーゲームを楽しむには、コインがどこに落ちるのかを視覚的に分かりやすくすることが大切です。ここでは、コインの着地位置を示す「ポインター」を作成し、狙いをつけやすくする方法を解説します。


ポインターを作成する手順

  1. ヒエラルキーで「Pointer」を作成
    • 「MovePoint」を右クリックします。
    • メニューから「3D Object」→「Cube」を選択します。
    • 新しいキューブの名前を「Pointer」に変更します。
  2. Colliderを削除
    • インスペクターで「Box Collider」コンポーネントを探し、右クリックで削除します。
    • ポインターは物理的な衝突が不要なため、Colliderを削除しておきます。
  3. サイズと位置の調整
    • インスペクターで以下の値を設定します:
      • Position: (0, 0, 7)
        (発射台の前方に配置)
      • Scale: (0.2, 0.2, 15)
        (細長い形状で視覚的にわかりやすく)
  4. マテリアルで半透明に設定する
    • プロジェクトウィンドウで新しいマテリアルを作成します。
      1. 「Create」→「Material」を選択し、名前を「PointerMaterial」に設定します。
    • インスペクターで以下の設定を行います:
      • Rendering Mode: Fade
      • A(アルファ値): 半透明にするためにスライダーで値を下げます。
    • 作成したマテリアルを「Pointer」にドラッグ&ドロップして適用します。

ポイント

  • ポインターは、プレイヤーがコインをどこに発射するかを視覚的に把握するための重要な役割を果たします。
  • サイズや透明度は、ゲームのバランスや見た目に応じて調整してください。

これでポインターの作成が完了です!狙いをつけやすくなり、ゲームの操作感が向上します。次は、発射台を操作してコインを発射する仕組みを確認していきましょう!



4. CoinShooterスクリプトを編集して移動可能にする

発射台を左右に動かすには、スクリプトを編集してプレイヤーの入力に応じて発射台の位置を変更する処理を追加します。ここでは、簡単なコードを使って操作可能な発射台を実現します。


CoinShooterスクリプトにコードを追加する

前回作成した CoinShooter.cs スクリプトに以下のコードを入力してください。このコードは発射台を左右に移動させる処理を実現します。

using UnityEngine;

public class CoinShooter : MonoBehaviour
{
    public GameObject coinPrefab; // コインのプレハブ
    public float shootForce = 500f; // 発射する力

    // 移動速度を決める変数
    public float Speed = 0.01f;

    void Update()
    {
        // マウス左クリックでコインを発射
        if (Input.GetMouseButtonDown(0))
        {
            ShootCoin();
        }

        // 発射台を動かす処理
        ShootMove();
    }

    void ShootCoin()
    {
        // コインを作成して前方に発射する
        GameObject coin = Instantiate(coinPrefab, transform.position, transform.rotation);
        Rigidbody rb = coin.GetComponent<Rigidbody>();
        rb.AddForce(transform.forward * shootForce);
    }

    void ShootMove()
    {
        // 発射台の移動処理
        var _speed = Vector3.zero;
        _speed.x = Speed;

        // Dキーで右に移動
        if (Input.GetKey(KeyCode.D))
        {
            this.transform.position -= _speed;
        }

        // Aキーで左に移動
        if (Input.GetKey(KeyCode.A))
        {
            this.transform.position += _speed;
        }
    }
}

コードの解説

  1. Speed 変数の追加public float Speed = 0.01f;
    • 発射台の移動速度を決める変数です。この値を調整することで発射台の動きの速さを変更できます。
  2. Updateメソッドの更新ShootMove();
    • Updateメソッド内で毎フレーム移動処理を呼び出します。
  3. ShootMoveメソッドの実装var _speed = Vector3.zero; _speed.x = Speed;
    • 移動量をVector3型で管理し、左右の移動を制御します。
    if (Input.GetKey(KeyCode.D)) { this.transform.position -= _speed; } if (Input.GetKey(KeyCode.A)) { this.transform.position += _speed; }
    • Input.GetKey(KeyCode.D)で右移動、Input.GetKey(KeyCode.A)で左移動を処理します。

スクリプトをUnityに反映させる

  1. スクリプトをアタッチ
    • 「MovePoint」オブジェクトにこのスクリプトをドラッグ&ドロップしてアタッチします。
  2. Inspectorビューで設定を確認
    • SpeedcoinPrefabなどのパラメータを設定してください。

これで発射台を左右に動かす機能が実装できました!次は、ゲームを再生して、キーボードのDキーとAキーを押して発射台が動くことを確認しましょう。



5. ゲームをテスト

発射台の移動スクリプトを実装したら、実際にゲームをテストして動作を確認しましょう!以下の手順に従って進めてみてください。


1. ゲームを再生する

Unityエディタでプロジェクトを保存した後、画面上部にある「Play」ボタンをクリックしてゲームを実行します。これで、ゲーム内で発射台が操作できるか確認できます。


2. キーボードで発射台を操作する

  • キーボードの Dキー を押して、発射台が右に移動するか確認してください。
  • Aキー を押して、発射台が左に移動するか確認してください。

もし移動がスムーズでない場合や動作しない場合は、以下をチェックしてください:

  1. スクリプトにエラーがないか
    Unityコンソールでエラーメッセージが表示されていないか確認します。特に「NullReferenceException」や「SyntaxError」などがないか確認してください。
  2. Speedの値
    CoinShooterスクリプト内の Speed が適切に設定されているか確認しましょう。移動が速すぎたり遅すぎたりする場合、値を変更して調整してください。たとえば、Speed = 0.05f; のように書き換えます。
  3. オブジェクトのアタッチ
    スクリプトが発射台のオブジェクト(MovePoint)に正しくアタッチされているか確認します。ヒエラルキーウィンドウで「MovePoint」を選択し、インスペクターのスクリプト欄をチェックしてください。

3. コインの発射を確認する

次に、マウスの左クリック を使ってコインが発射されるか確認しましょう。

  • コインが発射されない場合は、CoinPrefab に設定したプレハブが正しいか確認してください。
    • プレハブには必ず Rigidbody コンポーネントがアタッチされている必要があります。

4. 問題が発生した場合

Unityでゲームをテストしているときに問題が発生することはよくあります。以下の方法でトラブルシューティングを行いましょう。

  1. デバッグログを使う
    スクリプト内で Debug.Log を使って処理が正しく動いているか確認できます。たとえば、以下のように記述します:void ShootMove() { Debug.Log("ShootMoveが呼び出されました"); // 移動処理 var _speed = Vector3.zero; _speed.x = Speed; if (Input.GetKey(KeyCode.D)) { this.transform.position -= _speed; Debug.Log("Dキーが押されました"); } if (Input.GetKey(KeyCode.A)) { this.transform.position += _speed; Debug.Log("Aキーが押されました"); } }
    Unityコンソールにログが出力されることで、コードが実行されている箇所を把握できます。
  2. 入力設定の確認
    Unityの「Edit」 → 「Project Settings」 → 「Input Manager」で、Horizontal が正しく設定されているか確認してください。

5. 完成した動作を確認

  • 発射台がスムーズに左右へ移動できること。
  • コインが発射され、ポインターの方向に飛ぶこと。

すべてが正しく動作していれば、このステップは完了です!小さなバグでも、デバッグを繰り返して改善することが大切です! 🎉



よくある質問(FAQ)

Q
発射台が動かない場合はどうすればいいですか?
A

スクリプトで移動速度が正しく設定されているか、キーボード入力が反応しているかを確認してください。

Q
ポインターが半透明になりません。原因は何ですか?
A

マテリアルのRenderingModeが「Fade」または「Transparent」になっているか確認してください。

Q
コインが発射されない場合はどうすればいいですか?
A

コインプレハブにRigidbodyがアタッチされているか、スクリプトでプレハブが正しく指定されているか確認してください。

おすすめのアセット

「UI Kit Pro – Kawaii」は、かわいらしいデザインのゲームUIを簡単に作成できるUnityアセットです。特にモバイル向けに最適化されており、ボタンやアイコン、パネルなど、多彩なUI要素を含んでいます。9スライス対応のスプライトを使用しており、自由にカスタマイズが可能。色のバリエーションも豊富で、12種類のカラーパレットやグレースケール版が付属しているため、好みの色に変更できます。