Unity StateMachineBehaviour

Unity5で追加されたStateMachineBehaviourを使うと、

アニメーションの状態によってなにかする、ということがスッキリ書けるようになったみたい。

具体的には

japan.unity3d.com

にあるように、

animator.GetCurrentAnimatorStateInfo(0).isName("Idle")

はもう書かずにすむようになりました。

実際、これを書くときモヤモヤしてました。モヤモヤ。

 

ちょっと試してみたのですが、

例えばジャンプ中に入力による移動をさせないようにするためのbool パラメータをアニメータに持たせてOnStateEnter,OnStateExitでon/offするようなもの。

 

gist.github.com

 

このForbidWalkを追加したステートではフラグが立ち、オブジェクト側のMonoBehaviourで移動処理のさいにチェックをすると、

移動可能なステートでのみ、移動を行うというようになります。

 

自分が試した際は、transformの移動処理はMonoBehaviourに書いたのですが、

更にWalkステートに移動のStateMachineBehaviourを足すことで、

そちらで移動処理を行うこともできます。

アニメータに任せて大丈夫な限りは、そういう風にしちゃって良さそう。