【Unity】OnStateMoveをoverrideするとRootMotionが適用されずに詰む
StateMachineBehaviourについてのまとめを読んでください
概要
Unity.ver 5.4.4
UnityにはStateMachineBehaviourというものがある。
Unity - スクリプトリファレンス: StateMachineBehaviour
AnimatorのStateに紐づけられるスクリプトで、そこそこ便利
その中にOnStateMoveというoverrideできるメソッドがある
日本語のリファレンスはこんな感じ
何も書いてないに等しい
それで今回は表題の通り地雷を踏んだ
RootMotion
RootMotionはAnimationに適用されているポジションや回転をオブジェクトに作用させてくれる機能で、それがなぜか効かなくなって半ギレしていた
(Apply Root Motionはチェックを入れていて、そのほかもろもろもすべてokだった)
StateMachineBehaviour用の基底クラスを作成して、処理を共通化した時に効かなくなったので何かあるなと思い調査
結果、StateMachineBehaviourのOnSTateMoveがRootMotionのPosition更新制御を行っていて、それを直接overrideして書き換えている様子
なので、overrideしているとそのStateにセットされているアニメーションは適用されなくなるらしい
base.OnStateMove()を呼んでみたものの、適用されなかったので
OnStateMove()は自前で移動処理を書かないなら
絶対にoverrideしてはいけない
でFA、OnStateUpdateで間に合わせよう
この辺の仕様はマジでリファレンスに書いとけよUnity