Three.jsを使って、作ってみた

プログラミング関連の事を色々書いています(^^) 週末はレストランやコンビニのお菓子のことを書いています。

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」で、空のオブジェクトを作ります。
f:id:gupuru:20140501222124p:plain

先ほどの空のオブジェクト(A)の位置をx:0,y:20,z:0にします。

次に、上から落ちてくるキューブをPrefab化します。
Prefab化するために、「create」から「cube」を選びます。
f:id:gupuru:20140501224130p:plain

そのキューブに「Rigidbody」をつけます。
f:id:gupuru:20140501224234p:plain
で、キューブを「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をドラッグ・アンド・ドロップします。
f:id:gupuru:20140501224827p:plain

後は、実行し、スペースを押すと、上からキューブが落ちてきます。
f:id:gupuru:20140501225003p:plain

これで、終わります。


参考サイト
ハマケン100%開発: Unity: Prefabをスクリプトからインスタンス化する
ActionScript入門Wiki - Unity - インスタンスの生成