テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

NavmeshのAI経路探索とAnimatorのアニメーションを連動させる #Unity

f:id:tsubaki_t1:20150703010318g:plain

Animator(アニメーションシステム)とNavmesh(経路探索)を組み合わせてみます。具体的には止まったら静止モーション、移動中は走るモーションを使用します。

やり方

まず移動量でキャラクターのモーションを切り替えます。AnimatorはApply Root MotionでキャラクターのRoot座標を動かす事を想定していますが、今回の場合は移動量に従ってアニメーションを切り替える訳です。

なのでまずはApply Root Motionのチェックを外します。これでキャラクターの移動はNavmeshAgentもしくはスクリプトでしか動かなくなります。

f:id:tsubaki_t1:20150703014728p:plain

次にアニメーション側の設定です。キャラクターの移動速度をAnimatorに伝えるためパラメータを設定します。

f:id:tsubaki_t1:20150703014603p:plain

Speedの値でアニメーションを切り替えるようにします。今回は「静止」「歩行」「走行」の3種類のアニメーションをSpeedの値で切り替えます。切り替えはBlend Treeを使用します。Animatorで右クリック>Create State>From New Blend Treeブレンドツリーを作ります。

f:id:tsubaki_t1:20150703015137p:plain

Blend Tree内でAdd Motion Fieldを選択してモーションを3つ登録します。

f:id:tsubaki_t1:20150703015302p:plain

Automate thresholds(自動的に閾値を設定)のチェックを外し自分で設定可能にします。 Threshold(閾値)の値は静止から歩行までは小さめ、歩行から走るまでは少し長めに設定します。

f:id:tsubaki_t1:20150703015532p:plain

後は、このブレンドツリーに使用する値をSpeedに設定します。

f:id:tsubaki_t1:20150703015547p:plain

後はスクリプトNavmeshAgentの移動値をAnimatorのSpeedに登録してやります。NavmeshAgentの移動値はNavmeshAgent.velocityに格納されているので、そこから計算しています。

gist.github.com

これでキャラクターが停止中は静止アニメーション、移動中は移動アニメーションが設定できます。落下可能なrigidbody連携navmeshの場合は、地面との距離やrigidbodyのvelocityをとっておくと、ジャンプや着地モーションも設定できそうです。

http://unity-chan.com/images/imageLicenseLogo.png