スクリプトからプレハブを元にオブジェクトを生成する
検証環境
- Windows
-
- Windows 11
- Unity エディター
-
- 2021.3.3f1
- 入力システムパッケージ
-
- 1.3.0
この Tips の前提設定
この Tips の説明の前提として以下の設定を事前に行っています。
スクリプトでプレハブをもとにオブジェクトを作成する
前回の Tips ではプレハブからビューにオブジェクトを配置していましたが、この場合あらかじめ決まった数を配置してゲームを起動するという形になっています。 しかし、ゲームによってはゲーム実行中に動的にオブジェクトを追加したい場合もあると思います。 その場合はスクリプトでプレハブから追加することになります。
サンプル作成
新規でプロジェクトを配置したらボタンを配置します。ボタンをクリックするたびにプレハブからオブジェクトを生成するようにしてみます。
プレハブを作成します。これは前回の Tips と同じ手順です。
次にボタンをクリックしたときにオブジェクトを追加するためのスクリプトを作成します。名前は ButtonEvent
としておきます。
using UnityEngine;
public class ButtonEvent : MonoBehaviour
{
[SerializeField] private GameObject SpritePrefab;
public void OnClick()
{
// Instantiate にプレハブを渡すとそれをもとに新しいオブジェクトを生成する
var obj = Instantiate(SpritePrefab);
// 配置位置はランダムに
obj.transform.localPosition = new Vector3(Random.value * 6 - 3, Random.value * 6 - 3);
}
}
フィールドに GameObject
を定義しておき、あらかじめどのプレハブを元に生成するかを設定しておけるようにします。
Instantiate
メソッドに GameObject
を渡すとそのオブジェクトを元に新しいオブジェクトを作成することができます。
作成されたオブジェクトの位置は原点になり、いくらオブジェクトを生成してもオブジェクトが重なって分かりにくいので、生成後は位置をランダムに設定しています。 位置調整の数値はサンプルなので適当です。
作成したスクリプトは EventSystem にアタッチしておきます。
GameObject
をセットできるようにしてあるのでここにプレハブをドロップします。
ボタンクリック時に OnClick
メソッドが呼ばれるようにします。
サンプル実行
作成したらゲームを実行しボタンをクリックしてみてください。クリックするたびにオブジェクトが生成されるはずです。
もちろんプレハブを元に生成しているのでプレハブの値が変わっていれば生成されるオブジェクトもその値に従って生成されます。