UnityUnityメモ

Unity初心者必見!配列を使って複数のPrefabを順番に生成する方法

Unity

Unityでゲームを作るとき、同じようなオブジェクトを何度も使う場合、一つ一つ手動で配置するのは大変ですよね。そんなときに便利なのがPrefab(プレハブ)です。

Prefabは、事前に設定しておいたオブジェクトをテンプレート化し、何度でも再利用できる便利な機能です。本記事では、このPrefabを使い、配列に登録した複数のオブジェクトを順番に生成する方法を解説します。

Unityを使ったことがないという方はコチラの記事から見てみてください!

Prefabの準備

まず、5種類のオブジェクトを用意して、プレハブ化します。

  1. ヒエラルキー(Hierarchy)ウィンドウでオブジェクトを作成します。例えば、5種類のキューブを色違いで作成しましょう。
  2. 作成したオブジェクトをプロジェクト(Project)ウィンドウにドラッグ&ドロップしてプレハブにします。これでプレハブが作成されます。



スクリプトの作成

  • プロジェクト(Project)ウィンドウでScriptsフォルダを作成し、その中に新しいC#スクリプトを作成します。名前はClickCubeにしましょう。
  • 以下のコードをスクリプトに貼り付けます。

全体の説明

このスクリプトは、Unityで3Dオブジェクトをクリックした位置に生成するためのものです。具体的には、マウスの左クリックが検出されるたびに、事前に用意されたキューブのプレハブを画面上に配置します。

各部分の説明

  1. using文:これらは、Unityでスクリプトを書くために必要なライブラリを使うための宣言です。
  2. クラスと変数の定義:ClickCube という名前のクラスを定義しています。このクラスは MonoBehaviour を継承しているので、Unityのコンポーネントとして使うことができます。変数 cubeArray は、生成するキューブのプレハブを格納する配列です。count は、クリックの回数をカウントするための変数で、mousePosition はマウスの位置を格納するための変数です。
  3. Startメソッド:Start メソッドは、ゲームが開始されると最初に呼ばれるメソッドです。ここでは、count を0に初期化しています。
  4. Updateメソッド:Update メソッドは、毎フレーム呼ばれるメソッドです。ここでは、countcubeArray の長さより小さい場合に、マウスの左クリックを検出し、クリックした位置にキューブを生成します。mousePosition にマウスの位置を取得し、スクリーン座標からワールド座標に変換して、キューブを生成します。その後、count を1増やします。

全体の動き

  1. ゲームが開始されると、count が0に初期化されます。
  2. 毎フレーム、Update メソッドが呼ばれ、count がキューブの配列の長さより小さい場合に処理が実行されます。
  3. マウスの左クリックが検出されると、マウスの位置を取得し、その位置にキューブが生成されます。
  4. count が1増え、次のクリックで次のキューブが生成されます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ClickCube : MonoBehaviour
{
    public GameObject[] cubeArray; // プレハブの配列
    private int count; // クリックをカウントする変数
    private Vector3 mousePosition;

    void Start()
    {
        count = 0; // 0からスタート
    }

    void Update()
    {
        // countが配列のサイズを下回っているときに実行
        if(count < cubeArray.Length)
        {
            if (Input.GetMouseButtonDown(0)) // マウスの左クリックを検知
            {
                mousePosition = Input.mousePosition;
                mousePosition.z = 10.0f; // カメラからの距離を設定
                // 配列のcount番目を生成
                Instantiate(cubeArray[count], Camera.main.ScreenToWorldPoint(mousePosition), Quaternion.identity);
                count++; // クリックするたびに1ずつ増やす
            }
        }
    }
}



スクリプトの設定

  • 作成したClickCubeスクリプトをヒエラルキー(Hierarchy)ウィンドウで空のゲームオブジェクト(名前は何でもOK)にドラッグ&ドロップしてアタッチします。
  • インスペクター(Inspector)ウィンドウで、ClickCubeスクリプトのCubeArrayフィールドに5種類のCubeプレハブをドラッグ&ドロップして設定します。

実行

プレイモードで実行すると、マウスの左クリックで順番に異なるCubeプレハブが生成されるのを確認できます。生成される位置は、クリックしたマウスカーソルの位置になります。

以上で、クリックで順番に異なるプレハブを生成する方法の解説は終わりです。ぜひ、自分のプロジェクトで試してみてくださいね!



よくある質問

Q
プレハブを生成する位置を変更したい場合はどうすればいいですか?
A

Instantiateメソッドの第二引数で生成位置を指定できます。例えば、Vector3.zeronew Vector3(0, 1, 0)に変更すると、Y軸方向に1ユニット上に生成されます。

Q
一度生成したオブジェクトを消す方法はありますか?
A

生成したオブジェクトにスクリプトをアタッチして、一定時間後に消すようにするか、Destroyメソッドを使って手動で削除します。

Q
クリックではなく、特定のキーを押したときに生成したい場合はどうすればいいですか?
A

Updateメソッド内のInput.GetMouseButtonDown(0)Input.GetKeyDown(KeyCode.Space)などに変更すれば、スペースキーを押したときに生成するようになります。