手動ルートモーション

ルートモーションで移動するキャラクターの移動処理は自分で書きたい。そんな時のやり方

Animatorでルートモーションを有効にするとキャラクターが自動で動き始めますが、動く際の処理はUnityに完全にお任せです。MonoBehaviour.OnAnimatorMove が実装されていると、Animatorは移動処理を行わないので、Animator.velocityAnimator.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になってしまいます。