Version: 2019.3
Root Motion - Cómo funciona
Blend Trees (Árboles de Mezcla)

Tutorial: Scripting Root Motion para animaciones humanoide “in -place (en su lugar)”

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).

  • Abra el inspector para el archivo FBX que contiene la animación in-place (en su lugar), y vaya a la pestaña Animation.
  • Asegúrese que la Muscle Definition esté configurada al Avatar que usted piensa controlar (digamos que este avatar sea llamado Dude, y él ya haya sido agregado a la Hierarchy View).
  • Selecciona el Clip de Animación de los clips disponibles
  • Asegúrese que la Loop Pose esté propiamente alineada (la luz al lado de ella está verde), y la casilla de verificación para Loop Pose esté clickeada.
  • Pre-visualice la animación en el visor de animación para asegurarse que el principio y el fin de la animación estén alineadas de manera suave, y el personaje se esté moviendo “in-place (en su lugar)”.
  • En el clip de animación cree una curva que controle la velocidad del personaje (usted puede agregar una curva del Animation Import inspector Curves-> +)
  • Nombre la curva algo significante como, “Runspeed (la velocidad corriendo)”
  • Cree un nuevo Animator Controller, (llamémoslo RootMotionController)
  • Suelte el clip de animación deseada a él, esto debería crear un estado con el mismo nombre que la animación (digamos Run)
  • Agregue un parámetro al Controller con el mismo nombre que la curva (en este caso, “Runspeed (la velocidad corriendo”)
  • Seleccione el personaje Dude en la Hierarchy, dónde su Inspector ya debería tener un componente Animator .
  • Arrastre el RootMotionController a la propiedad Controller del Animator.
  • Si usted presiona play (reproducir), usted debería ver el “Dude” corriendo en su lugar

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

Root Motion - Cómo funciona
Blend Trees (Árboles de Mezcla)