Unity Prefabのインスタンスを作り、動的にGameObjectを作る!
今回は、Unityの「Prefabのインスタンスを生成」について書きます。
Prefabのインスタンスを作ると、動的にGameObjectを作れます。
つまり、コードで、オブジェクトを大量に作れます。
例えば、銃の弾や敵キャラを作るときなどに使えます。
インスタンスを生成する前に、Prefabを勉強する必要があります。
Prefab(プレハブ)は、簡単に言うと、オブジェクト指向プログラミングの「クラス」に近い機能になります。
詳しくは、コチラに書いています。
インスタンスを作る方法を書いていきます。
方法は、「Instantiate」関数を使います。
このような形で、Scriptに書きます。
・javascript
var hako : Transform;
Instantiate(hako,transform.position,transform.rotation);
Instantiate関数の引数は、このようになっています。
Instantiate(Object original, Vector3 position, Quaternion rotation)
第1引数は、Prefabです。第2引数は、位置(Vector3)です。第3引数は、角度(Quaternion)です。
第1引数ですが、Prefabが持っているコンポーネント次第で、どれでも良いみたいです。
つまり、GameObject ,Transform,Rigidbodyなどを引数に与えても問題ないみたいです。
今回は、「Transform」を与えています。
では、インスタンスを使ったプログラムを書きます。
キーボードのスペースを押すと、上からキューブが落ちてくるというプログラムを作ります。
はじめに、「GameObject」の「Create Empty」で、空のオブジェクトを作ります。
先ほどの空のオブジェクト(A)の位置をx:0,y:20,z:0にします。
次に、上から落ちてくるキューブをPrefab化します。
Prefab化するために、「create」から「cube」を選びます。
そのキューブに「Rigidbody」をつけます。
で、キューブを「Assets」にドラッグ・アンド・ドロップし、Prefab化します。
その後、Scene上にあるキューブは特に必要がないので、削除します。
で、最初に作った空のオブジェクト(A)にScriptを追加します。
こんな感じでコードを書きます。(javascript)
#pragma strict var hako : Transform; function Update () { if(Input.GetButtonUp("Jump")){ Instantiate(hako,transform.position,transform.rotation); } }
最後に、空のオブジェクト(A)にPrefabを追加します。
Prefabをドラッグ・アンド・ドロップします。
後は、実行し、スペースを押すと、上からキューブが落ちてきます。
これで、終わります。
参考サイト
ハマケン100%開発: Unity: Prefabをスクリプトからインスタンス化する
ActionScript入門Wiki - Unity - インスタンスの生成