敵(mob)の移動 | unity3d レベル1

unity3d レベル1

unity3dでゲーム作りはじめました。
http://knr.ifdef.jp/
twitter: @knorsUni

タワーディフェンスの基本的な動き。

最初の頃は、壁にぶつかったら”回転”みたいな事をやっていたけど、SendMessageを覚えてからこっちを使ってる。


・mobは指定された順路(target)を辿ってゴールにたどり着く。


//mob側のスクリプト
------------------------------------------------------------------
var speed = 2;
var nVec : Vector3;


function Start () {
nVec.y = this.transform.position.y;
}


function Update () {
rigidbody.velocity = transform.forward * speed;
}


function nextEvent(a:GameObject){
nVec.x = a.transform.position.x;
nVec.z = a.transform.position.z;
transform.LookAt(nVec);
}

------------------------------------------------------------------
Rigidbodyを付けるのを忘れずに、さらにUse Gravityのチェックを外す。"mob"というタグを付けておく。
nVecがtargetの位置。
nextEventで次のtargetを指定。
nextEventに次のtargetを送らなければいけない。


//target側のスクリプト。
-----------------------------------------------------------------
var target : GameObject;


function OnTriggerEnter(col : Collider){
if(col.gameObject.tag == "mob"){
col.SendMessage("nextEvent",target);
}
}

------------------------------------------------------------------
targetはHierarchy→Create→SphereなどでCollider(Is Trigger)の付いたオブジェクトを。
そのオブジェクトのインスペクターに次のtargetを入れておく。
mobが当たったら次のtargetをmobに送信。
次のtargetを幾つか準備しておいてランダムで変えるのも手。
一番最初のtargetはmobが出現する位置に。


慣れれば超簡単。でもtargetをインスペクターに入れていく作業が面倒。
次のtargetを複数用意してラムダムに…ってやったら、コピペしたtargetは名前が一緒なのでどれがどれだかw