ルートモーションで移動するキャラクターの移動処理は自分で書きたい。そんな時のやり方
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になってしまいます。