スポンサーリンク
スポンサーリンク
UnityUnityメモ

Unityで発射するPrefabの種類を順番に変更する

Unity

こんにちは!今回はUnityで、クリックごとにボールを発射し、発射するたびに3種類のPrefabを順番に切り替える方法を紹介します。プログラムは初心者にもわかりやすいように説明するので、一緒にやってみましょう!

ステップ1: プレファブの準備

  1. ボールとして使いたい3種類のオブジェクトを作成します。例えば、3つの異なる色の球体を作るといいでしょう。
    • Hierarchyウィンドウで右クリック → 3D ObjectSphereを選択します。これを3つ作ります。
  2. それぞれの球体に異なる色を設定します。色の設定は、プロジェクトウィンドウを右クリック「Create」→「Material」を選択し、色を設定して「Sphere」にアタッチします。
  3. 作成した3つの球体をそれぞれPrefabとして保存します。Prefabにするためには、Hierarchyウィンドウから球体をプロジェクトウィンドウにドラッグ&ドロップします。

ステップ2: スクリプトの作成

  1. プロジェクトウィンドウで右クリック → CreateC# Scriptを選び、スクリプトをBallShooterと名付けます。
  2. BallShooterスクリプトをダブルクリックして開き、以下のコードを追加します。

コード全体の説明

  • クラスの宣言BallShooter というクラスを作ります。
  • 変数の定義:ボールの配列と、カウント用の変数を用意します。
  • Start メソッド:ゲームが始まった時に、カウントを0にします。
  • Update メソッド:毎フレーム実行され、クリックされたらボールを発射します。

各部分の説明

1. クラスと変数の定義

public class BallShooter : MonoBehaviour
{
    public GameObject[] ballArray;
    private int count;
  • public GameObject[] ballArray;:発射するボールの種類を格納する配列です。GameObject はUnity内で扱う3Dオブジェクトを意味します。
  • private int count;:ボールを発射した回数を記録するための変数です。privateなのでこのクラス内でのみ使います。

2. Start メソッド

    void Start()
    {
        count = 0;
    }
  • void Start():このメソッドはゲーム開始時に一度だけ実行されます。
  • count = 0;:ボールを発射した回数を0に初期化します。

3. Update メソッド

    void Update()
    {
        if (count < ballArray.Length)
        {
            if (Input.GetMouseButtonDown(0))
            {
                GameObject ball = GameObject.Instantiate(ballArray[count]) as GameObject;
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                Vector3 dir = ray.direction;
                ball.GetComponent<Rigidbody>().AddForce(dir * 3000);
                count++;
            }
        }
        else
        {
            count = 0;
        }
    }
}
  • void Update():このメソッドは毎フレーム実行されます。ゲームの進行中に常に動く部分です。
  • if (count < ballArray.Length):まだ発射していないボールがあるか確認します。
  • if (Input.GetMouseButtonDown(0)):マウスの左クリックが押されたら以下の処理を行います。
    • GameObject ball = GameObject.Instantiate(ballArray[count]) as GameObject;:現在のカウントに対応するボールを生成します。
    • Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);:カメラからマウスの位置に向かってレイ(光線)を飛ばします。
    • Vector3 dir = ray.direction;:レイの飛んでいる方向を取得します。
    • ball.GetComponent<Rigidbody>().AddForce(dir * 3000);:生成したボールに力を加えて発射します。3000は力の大きさです。
    • count++;:ボールを発射したのでカウントを1増やします。
  • else { count = 0; }:もし全てのボールを発射し終えたら、カウントを0にリセットします。

全体の動き

  1. ゲームが始まるとカウントが0に初期化されます。
  2. プレイヤーがマウスの左クリックをすると、ballArray の中のボールが一つずつ発射されます。
  3. ボールはマウスの位置に向かって飛んでいきます。
  4. すべてのボールを発射し終えると、再びカウントが0に戻り、最初から繰り返します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallShooter : MonoBehaviour
{
    public GameObject[] ballArray;
    private int count;

    void Start()
    {
        count = 0;
    }

    void Update()
    {
        if (count < ballArray.Length)
        {
            if (Input.GetMouseButtonDown(0))
            {
                GameObject ball = GameObject.Instantiate(ballArray[count]) as GameObject;
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                Vector3 dir = ray.direction;
                ball.GetComponent<Rigidbody>().AddForce(dir * 3000);
                count++;
            }
        }
        else
        {
            count = 0;
        }
    }
}

ステップ3: スクリプトの設定

  1. 空のオブジェクトなどを作成し、BallShooterスクリプトをドラッグ&ドロップしてアタッチします。
  2. InspectorウィンドウでBallShooterスクリプトのコンポーネントを確認し、ballArrayに先ほど作成した3つのPrefabを順番にドラッグ&ドロップして設定します。

ステップ4: テストと調整

  1. ゲームを再生して、マウスの左クリックをしてみてください。クリックごとに3種類のボールが順番に発射されることを確認します。

これで、クリックごとに3種類のボールPrefabを順番に発射する機能が完成です!シンプルなスクリプトですが、色々と応用が効くのでぜひ試してみてくださいね。楽しんで学びましょう!

おすすめのアセット

「Platformer Engine」は、Unityでプラットフォーマーゲームを簡単に作成できるテンプレートです。初心者にも使いやすい設計になっており、基本的なキャラクターコントロールや敵の配置、アイテム収集など、プラットフォーマーに必要な機能が一通り揃っています。特に注目すべき特徴は、使いやすいエディター拡張機能で、これによりゲームのレベルデザインが直感的に行えます。また、コードのサンプルも豊富に含まれているため、プログラミングの勉強にも最適です。

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました