2011年8月17日水曜日

Unityでオブジェクトを動的に生成する方法

Unityを触ってちょっとずつ理解したこと11

ゲーム中に動的にオブジェクトを増減する方法
(例:キャラクターがミサイルを発射するとミサイルが表示されて何かに当たると消える)

var missile : GameObject;
function Update () {
if (Input.GetMouseButtonDown (0))
{
var position : Vector3 = new Vector3(0, -0.2, 1) * 10.0;
position = transform.TransformPoint (position);
var thisMissile : GameObject = Instantiate (missile, position, transform.rotation) as GameObject;
Physics.IgnoreCollision(thisMissile.collider, collider);
}
}

var missile : GameObject;にクローンを生成したいミサイルを登録する登録方法は下図のようにミサイルプレハブをスクリプトの上にドラッグ&ドロップするだけ。

var position : Vector3 = new Vector3(0, -0.2, 1) * 10.0;
position = transform.TransformPoint (position);
はミサイルが発生する地点を設定している。TransformPointメソッドは引数で渡された座標をローカル座標からワールド座標に変換する。この例の場合では、ミサイルの発射元であるキャラクターを原点とした座標からO(0,0,0)を原点とした絶対座標に変換した座標の値を取得する。これは、これから生成されるミサイルオブジェクトはキャラクターの子オブジェクトではなく、ヒエラルキーのルート直下に置かれるため。

var thisMissile : GameObject = Instantiate (missile, position, transform.rotation) as GameObject;
Instantiateメソッドでミサイルオブジェクトのクローンを生成する。Instantiateメソッドの第一引数がクローンの元になるオブジェクト、第二引数が生成されたクローンが配置される座標、第三引数がクローンが生成された時に向いている向き。as GameObjectは不明。このキャストっぽい構文がJavaScriptのキャストの仕方?

Physics.IgnoreCollision(thisMissile.collider, collider);
Physics.IgnoreCollisionメソッドでミサイルとキャラクターが接触しても、ぶつかったと判定されないようにする。




0 件のコメント:

コメントを投稿