オブジェクトの複製
既存のオブジェクトを複製する
Object クラスには Unity エンジンによって管理されている任意のオブジェクトを複製する Instantiate() メソッドが用意されています。Unity エディタなどによって作られた複雑なオブジェクトの構造を、そのまま複製することができるため、デザイナによって作られたオリジナルのオブジェクトを、スクリプトで複製しながらゲームで動的に利用するといった使い方ができます。
public static Object Instantiate(Object original)
public static Object Instantiate(Object original, Vector3 position, Quaterinon rotation)
original パラメータにはコピー元となるオブジェクトを指定します。position パラメータには複製された新しいオブジェクトの座標、rotation には向きを指定します。position パラメータと rotation パラメータが省略されている場合は、コピー元のオブジェクトと同じ位置と向きで作られます。
Instantiate() メソッドは original パラメータに指定されたオブジェクトを複製した新しいインスタンスを返します。
using UnityEngine; public class Test : MonoBehaviour { void Start() { GameObject original = GameObject.Find("Cube"); GameObject copied = Object.Instantiate(original) as GameObject; copied.transform.Translate(2, 0, 0); } }
コード1は "Cube" という名前のオブジェクトを取得して複製するスクリプトです。新しく作られたオブジェクトは X 軸に 2 だけ移動させて表示しています。
ゲームオブジェクトに限らず任意のオブジェクトを複製できるため、Instantiate() メソッドの戻り値型は UnityEngine.Object クラスです。元のオブジェクト型として利用するにはキャスト式や as 演算子で変換する必要があります。