プレハブのインスタンスの作り方

このページではプレハブのインスタンスの作り方や、インスタンスから元のプレハブを書き換える(=オーバーライドする)方法について説明します。


※この記事で使用しているUnityのバージョン:Unity2019.1

プレハブのインスタンスの作り方

プレハブのインスタンスの作り方は次の2通りがあります。

  1. Unityエディタ上でインスタンスを作る方法
  2. スクリプトからインスタンスを作る方法

Unityエディタ上でインスタンスを作る方法

まずはUnityエディタ上からプレハブのインスタンスを作る方法です。こちらはとても簡単で、インスタンスを作りたいプレハブをプロジェクトウィンドウで選んで、ヒエラルキーかシーンにドラッグ&ドロップするだけです。

インスタンス化したオブジェクトは青い立方体のアイコンで表示されます(下図)。

インスタンス化したゲームオブジェクト

スクリプトからインスタンスを作る方法

もう一つ、スクリプトからインスタンスを自動生成する方法もあります。こちらはC#スクリプトを用意する必要がありますが、手動では生成しきれない数のインスタンスを作れたり、ゲーム中に必要な時にだけ生成する、といったことができたりして便利です。

スクリプトでインスタンスを生成するときは「Instantiate()メソッド」を使います。スクリプトリファレンスから引用すると引数は

Instantiate (Object original, Vector3 position, Quaternion rotation, Transform parent);

となっています。もう少し分かりやすく説明すると、指定できる引数は全部で4つあって

  1. 生成するプレハブ
  2. 座標
  3. 回転
  4. 親(※指定する場合のみ)

の順になっています。では具体的なスクリプトの例を見てみましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour
{

  [SerializeField]
  int numOfInstance = 10;
  [SerializeField]
  float padding = 2;
  [SerializeField]
  GameObject prefab;

    void Start()
    {
    CreateInstance();
    }

    void CreateInstance()
  {
    Vector3 position = Vector3.zero;

    for(int i = 0; i < numOfInstance; i++)
    {
      Instantiate(prefab, position, Quaternion.identity);

      position.x += padding;
    }
  }

}

これは指定したプレハブのインスタンスを等間隔に、指定した数だけ生成するスクリプトです。実行結果は下の図のようになります。

Instantiateの実行結果の例

なおスクリプトからインスタンスを生成する場合の注意点は、元のプレハブのトランスフォームが無視されるということです。なので特に回転や拡大縮小を適用したい場合は別途指定してあげる必要があります。

インスタンスから元のプレハブを書き換える方法

プレハブを使っていると、例えば「インスタンスの変更を元のプレハブに適用したい」という場面がたびたびあります。このようなときのために、プレハブのインスタンスには「オーバーライド」というボタン(?)がついています(下図)。

プレハブのオーバーライドボタン

ここをクリックすると、元のプレハブからの変更点の一覧が表示されて「すべてを適用する」というボタンが出てきます。このボタンを押すとそのインスタンスの変更が元のプレハブに適用されるというわけです。

ただし、当然ですが元のプレハブを書き換えることによって他のインスタンスも変更されるので、間違えてオーバーライドしてしまわないように十分注意してください。