上半身を他のオブジェクトに向ける
今回はキャラクターに敵の方向を向かせたいと思います。
使うのは、
- animator.SetLookAtWeight()
- animator.SetLookAtPosition()
たったコレだけでできるんです!
驚かないかもしれませんが。。。
僕はこの方法を見つけるまで結構時間がかかりました。
では、さっそく方法を見ていきましょう。
準備としてAnimatorControllerの設定をいじる
今回は簡単のため、Ethanで試してみました。
EthanのAnimatorControllerを開いて、BaseLayerの設定を開きます。
そして、IK Passにチェックを入れます。
これで準備は完了!
あとはスクリプトを書いていきます。
コードを見てみよう!
LookAtObjectというスクリプトを作って、Ethanに取り付けました。
public class LookAtObject : MonoBehaviour { Animator animator; Vector3 targetPos; public GameObject targetObject; // テスト用のオブジェクト(敵) void Start() { this.animator = GetComponent<Animator>(); this.targetPos = targetObject.transform.position; } void Update() { this.targetPos = targetObject.transform.position; } // IK Passにチェックをつけると使える。 private void OnAnimatorIK(int layerIndex) { this.animator.SetLookAtWeight(1f, 0.3f, 1f, 0f, 0.5f); // LookAtの調整 this.animator.SetLookAtPosition(this.targetPos); // ターゲットの方向を向くよ } }
これで、Ethanは敵の方向に上半身を向けるようになりました。
では、OnAnimatorIKでは何をしているのでしょう。
OnAnimatorIKって?
リファレンスを見てもよくわからなった。
- OnAnimatorIKはIk Passにチェックを入れると使える
- SetLookAtWeight(全体の調整?, 体の調整, 頭の調整, 眼の調整, 可動域の調整)
- SetLookAtPosition(LookAtの方向)
という理解です。動けばよい。
これで、空中の敵にも体を向けられる。