Sometimes your animation comes as “in-place”, which means if you put it in a scene, it will not move the character that it’s on. In other words, the animation does not contain “root motion”. For this, we can modify root motion from script. To put everything together follow the steps below (note there are many variations of achieving the same result, this is just one recipe).
И наконец, чтобы управлять движением, нам нужно создать скрипт (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 (Обрабатывается скриптом).