Algunas veces sus animaciones vienen “in-place (en su lugar) ”, que significa que si la pone en una escena, no moverá el personaje que está en él. En otras palabras, la animación no contiene toda la “root motion”. Para esto, nosotros podemos modificar la root motion del script. Para poner todo junto, siga los pasos a continuación (tenga en cuenta que hay muchas variaciones para lograr el mismo resultado, esta es solo una receta).
Finalmente, para controlar el movimiento, nosotros necesitaremos crear un script (RootMotionScript.cs), que implementa la llamada OnAnimatorMove:-
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;
}
}
}
Usted debería adjuntar el RootMotionScript.cs al objeto “Dude”. Cuando usted haga esto, el componente Animator va a detectar que el script tenga una función OnAnimatorMove y muestre la propiedad Apply Root Motion como Handled by Script