Иногда встречаются “in-place” анимации. Это означает, что при размещении персонажа с такой анимацией в сцену, она не будет перемещать персонаж. Другими словами, анимация не содержит “root motion”. Для этого нужно изменить root motion из скрипта. Чтобы это сделать, выполните следующие шаги (есть много вариантов достижения этого результата, ниже описан только один способ).
И наконец, чтобы управлять движением, нам нужно создать скрипт (RootMotionScript.cs), который реализует OnAnimatorMove callback:-
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Animator))]
public class RootMotionScript : MonoBehaviour {
void OnAnimatorMove()
{
Animator animator = GetComponent<Animator>();
if (animator)
{
Vector3 newPosition = transform.position;
newPosition.z += animator.GetFloat("Runspeed") * Time.deltaTime;
transform.position = newPosition;
}
}
}
Вам нужно прикрепить RootMotionScript.cs к объекту “Dude”. Когда вы это сделаете, компонент Animator определит что у скрипта есть функция OnAnimatorMove и отобразит свойство Apply Root Motion как Handled by Script (Обрабатывается скриптом).