Project内に次のPrefab (BallPrefab)があるとする。
このPrefabをシーン内に生成するには、Instantiate()を使う。
たとえば次のScriptを作り、シーン内のGameObjectにアタッチ。
using UnityEngine; using System.Collections; public class MainScript : MonoBehaviour { public GameObject ball; // Use this for initialization void Start () { for (int i=0 ; i<3 ; ++i) { Instantiate(ball,new Vector3(Random.Range(-0.5f,0.5f)*10,i*10+10,Random.Range(-0.5f,0.5f)*10),Quaternion.identity); } } // Update is called once per frame void Update () { } }
Instantiateの引数は、複製したいオブジェクト(Object)、位置(Vector3D)、回転(Quaternion)。
public変数として定義した'ball'に、Project内のPrefabをひもづける。
Instantiate()の戻り値は'Object'のため、戻り値は使用するにはキャストが必要。
RigidBodyにキャスト:
void Init () { Rigidbody[] obj = new Rigidbody[3]; for (int i=0 ; i<3 ; ++i) { obj[i] = Instantiate(ball,new Vector3(Random.Range(-0.5f,0.5f)*10,i*10+10,Random.Range(-0.5f,0.5f)*10),Quaternion.identity) as Rigidbody; }
GameObjectにキャスト:
void Init () { GameObject[] obj = new GameObject[3]; for (int i=0 ; i<3 ; ++i) { obj[i] = Instantiate(ball,new Vector3(Random.Range(-0.5f,0.5f)*10,i*10+10,Random.Range(-0.5f,0.5f)*10),Quaternion.identity) as GameObject; }
このシーンを実行すると、Project内のBallPrefabがランダムな位置に生成される。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
[追記:2015/3/9]
上の手順では、インスタンス化したGameObjectはシーンの最上位階層におかれる。インスタンス化したGameObjectを特定のGameObjectの下(子供)におきたい場合は、
obj[i] = Instantiate(ball,new Vector3(Random.Range(-0.5f,0.5f)*10,i*10+10,Random.Range(-0.5f,0.5f)*10),Quaternion.identity) as GameObject; obj[i].transform.parent = targetGameObject.transform; }
と、transform.parentをつなぎなおせばいよい。