Unityでゲームを作るとき、同じようなオブジェクトを何度も使う場合、一つ一つ手動で配置するのは大変ですよね。そんなときに便利なのがPrefab(プレハブ)です。
Prefabは、事前に設定しておいたオブジェクトをテンプレート化し、何度でも再利用できる便利な機能です。本記事では、このPrefabを使い、配列に登録した複数のオブジェクトを順番に生成する方法を解説します。
Unityを使ったことがないという方はコチラの記事から見てみてください!
Prefabの準備
まず、5種類のオブジェクトを用意して、プレハブ化します。
- ヒエラルキー(Hierarchy)ウィンドウでオブジェクトを作成します。例えば、5種類のキューブを色違いで作成しましょう。
- 作成したオブジェクトをプロジェクト(Project)ウィンドウにドラッグ&ドロップしてプレハブにします。これでプレハブが作成されます。

スクリプトの作成
- プロジェクト(Project)ウィンドウで
Scripts
フォルダを作成し、その中に新しいC#スクリプトを作成します。名前はClickCube
にしましょう。 - 以下のコードをスクリプトに貼り付けます。
全体の説明
このスクリプトは、Unityで3Dオブジェクトをクリックした位置に生成するためのものです。具体的には、マウスの左クリックが検出されるたびに、事前に用意されたキューブのプレハブを画面上に配置します。
各部分の説明
- using文:これらは、Unityでスクリプトを書くために必要なライブラリを使うための宣言です。
- クラスと変数の定義:
ClickCube
という名前のクラスを定義しています。このクラスはMonoBehaviour
を継承しているので、Unityのコンポーネントとして使うことができます。変数cubeArray
は、生成するキューブのプレハブを格納する配列です。count
は、クリックの回数をカウントするための変数で、mousePosition
はマウスの位置を格納するための変数です。 - Startメソッド:
Start
メソッドは、ゲームが開始されると最初に呼ばれるメソッドです。ここでは、count
を0に初期化しています。 - Updateメソッド:
Update
メソッドは、毎フレーム呼ばれるメソッドです。ここでは、count
がcubeArray
の長さより小さい場合に、マウスの左クリックを検出し、クリックした位置にキューブを生成します。mousePosition
にマウスの位置を取得し、スクリーン座標からワールド座標に変換して、キューブを生成します。その後、count
を1増やします。
全体の動き
- ゲームが開始されると、
count
が0に初期化されます。 - 毎フレーム、
Update
メソッドが呼ばれ、count
がキューブの配列の長さより小さい場合に処理が実行されます。 - マウスの左クリックが検出されると、マウスの位置を取得し、その位置にキューブが生成されます。
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.zero
をnew Vector3(0, 1, 0)
に変更すると、Y軸方向に1ユニット上に生成されます。
- Q一度生成したオブジェクトを消す方法はありますか?
- A
生成したオブジェクトにスクリプトをアタッチして、一定時間後に消すようにするか、
Destroy
メソッドを使って手動で削除します。
- Qクリックではなく、特定のキーを押したときに生成したい場合はどうすればいいですか?
- A
Update
メソッド内のInput.GetMouseButtonDown(0)
をInput.GetKeyDown(KeyCode.Space)
などに変更すれば、スペースキーを押したときに生成するようになります。