2010年11月8日月曜日

UnityでのAI実装:任意のオブジェクトの方向を向かせる

UnityではTransform.LookAt()があるので、これに向かせたい相手のTransformを渡すと実現できる。Quaternion.LookRotation()を使ってもほぼ同じことが出来る。

以下Transform.LookAtの公式サンプルとほぼ同じ内容。targetに任意のオブジェクトを割り当てるとその方向を向くようになる。

public var target : Transform;

function Update () {
transform.LookAt(target);
}

ただし、この方法では実行した時点で回転が完了する、つまり回転速度が無限になってしまうのが場合によっては問題となる。一定速度以上では旋回しないようにするにはどうするか。

これはQuaternion.Slerp()に面倒事はお任せで実現可能。ただドキュメントが微妙でspeedに何入れるとどれぐらいに制限できるのかというところが分からない。

var speed = 0.5;
public var target : Transform;

function Update () {
var relativePos = target.position - transform.position;
var rotation = Quaternion.LookRotation(relativePos);
transform.rotation =
Quaternion.Slerp (transform.rotation, rotation, Time.deltaTime * speed);
}

0 件のコメント:

コメントを投稿