ルートモーションで移動するキャラクターの移動処理は自分で書きたい。そんな時のやり方
Animatorでルートモーションを有効にするとキャラクターが自動で動き始めますが、動く際の処理はUnityに完全にお任せです。MonoBehaviour.OnAnimatorMove が実装されていると、Animatorは移動処理を行わないので、Animator.velocity や Animator.angularVelocity を元に移動処理を実装することができます。
using UnityEngine; class AnimationTest : MonoBehaviour { Animator mAnimator; void Awake() { mAnimator = GetComponent<Animator>(); } void OnAnimatorMove() { transform.position += mAnimator.velocity * Time.deltaTime; } }
ちなみにですが Animator.applyRootMotion がfalseだと速度はとれなくなります。IAnimationJob.ProcessRootMotion でも値は常に0になってしまいます。