【Unity/C#】Instantiate()(動的生成)の基本と仕組み

コードの型

「元となるオブジェクト」をコピーして、指定した場所に配置します。

C#

// 元となるオブジェクト(プレハブ)を登録
public GameObject prefab;

// 実行して生成する
Instantiate(prefab, new Vector3(0, 0, 0), Quaternion.identity);

コードの仕組み

Instantiate は「実体化する(インスタンスを作る)」という意味です。

  • プレハブ(Prefab)が必要: 何もないところから急にモノは作れません。「コピー元のひな形」として、あらかじめプロジェクト内に「プレハブ」という保存用ファイルを作っておく必要があります。
  • 3つの引数:
    1. 生成したいモノ(Prefab): 何を出す?
    2. 場所(Position): どこに出す?
    3. 向き(Rotation): どんな角度で出す?(Quaternion.identity は「回転なし」という意味です)

活用例

弾丸の射出や、敵キャラクターの出現など、「同じものを何度も出す」場面で必ず使われます。

C#

public GameObject bulletPrefab; // 弾丸のプレハブをインスペクターで登録

void Update()
{
    // スペースキーが押されたら、その場に弾丸を生成する
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Instantiate(bulletPrefab, transform.position, Quaternion.identity);
    }
}

その他(実用的なテクニック)

  • プレハブを忘れずに: コードを書くだけでは動きません。Unityエディタ上で、Assetsにあるプレハブを、コード内の public 変数(上記の例では bulletPrefab)の枠にドラッグ&ドロップで紐付ける必要があります。
  • 寿命を持たせる: 生成したオブジェクトが画面外に出たまま残り続けると、ゲームが重くなる原因になります。Destroy(obj, 3.0f); のように、「生成してから3秒後に消す」という処理をセットにするのがプロの流儀です。
  • 親子関係の指定: Instantiate(prefab, parentObject.transform); と書くと、生成したオブジェクトを特定の親オブジェクトの下に配置できます。UIの整理などに非常に便利です。

初心者向けまとめ

Instantiate は、ゲームの中に「後からモノを登場させる」ための魔法です。

  • SetActive:元からあったモノを表示したり隠したりする。
  • Instantiate:元からなかったモノを新しく作り出す。

コメント

タイトルとURLをコピーしました