Unity Mecanim Cómo reproducir animación al presionar una tecla

Mecanim es una herramienta basada en estado para Unity que brinda a los desarrolladores un control de animación avanzado y un editor rico en funciones.

Las características destacadas de Mecanim son la combinación de animaciones y la reorientación de animaciones.

La combinación de animaciones es un proceso automático de realizar transiciones suaves entre animaciones.

El retargeting de animación es un proceso de reutilización de animaciones existentes para que funcionen entre múltiples plataformas de personajes, eliminando la necesidad de crear nuevas animaciones para cada nuevo personaje.

En este tutorial, mostraré cómo animar un cubo y reproducir la animación al presionar una tecla con Mecanim.

Pasos

Para animar un Cubo en Unity, siga los pasos a continuación:

  • Crear un nuevo Cubo (GameObject -> Objeto 3D -> Cubo)

  • Seleccione Cubo y luego abra la ventana Animación (Ventana -> Animación -> Animación)
  • En la ventana Animación, haga clic en "Create", que creará una nueva animación, un nuevo controlador de animación y adjuntará un componente de animación al cubo.
  • Nombra la nueva animación. "SpinAnimation"

  • En la ventana de animación, haga clic en Agregar propiedad -> Transformar -> Rotación
  • Esta animación tendrá 2 fotogramas, inicio y fin.
  • Para el primer cuadro, establecemos la rotación en (0, 0, 0)

  • Para el último cuadro, establecemos la rotación en (0, 360, 0)

La animación está lista.

Sugerencia: para crear más animaciones, simplemente haga clic en el nombre de la animación en la ventana Animación y luego haga clic en "Create new Clip...".

Para configurar Mecanim Animator Controller, siga los pasos a continuación:

  • Haga doble clic en el recurso Animator Controller que se creó con la animación.

  • Aparecerá una nueva ventana titulada "Animator", que debería verse así:

  • Notarás que hay una flecha que apunta desde "Entry" a "SpinAnimation", lo que significa que la animación se reproducirá tan pronto como comience la escena, pero eso no es lo que queremos, queremos para reproducir solo la animación al presionar una tecla.

Como Mecanim requiere tener una animación de entrada, lo que podemos hacer es crear un nuevo estado Vacío y convertirlo en una Entrada:

  • Haga clic con el botón derecho en la ventana de Animator -> Crear estado -> Vacío:

  • Seleccione Estado de entrada -> Haga clic derecho sobre él -> Establecer estado predeterminado de StateMachine, luego señale "New State":

Lo último que queda por hacer es hacer una transición a SpinAnimation, pero solo queremos hacer la transición una vez que se cumpla la condición específica, ahí es cuando aparece la pestaña Parámetros:

  • Haga clic en la pestaña Parámetros en la ventana de Animator y luego haga clic en el símbolo (+):

Notará que hay varios tipos disponibles, pero por ahora, seleccionaremos Disparador, es similar a bool pero a diferencia de bool, se establece automáticamente en falso una vez que la animación es completado, útil para animaciones one-shot:

  • Nombra el parámetro "spinTrigger"

  • Por último, seleccione "Any State" -> Haga clic derecho sobre él -> Hacer transición, luego apunte a SpinAnimation:

  • Haga clic en la flecha de transición y, en la vista Inspector, en Condiciones, haga clic en (+) y asegúrese de que el parámetro spinTrigger esté seleccionado

  • De forma predeterminada, las animaciones creadas con Unity tienen el bucle habilitado, pero dado que solo queremos reproducir la animación una vez, lo que debemos hacer es seleccionar el Clip de animación en la vista Proyecto y luego desmarcar la casilla de verificación Tiempo de bucle:

Para poder controlar los parámetros de Mecanim desde un script, necesitaremos usar funciones especiales, verifique el código a continuación:

  • Cree un nuevo script, llámelo "AnimationTest", elimine todo y luego pegue el siguiente código dentro de él:

Prueba de animación.cs

using UnityEngine;

public class AnimationTest : MonoBehaviour
{

    Animator animator;

    // Start is called before the first frame update
    void Start()
    {
        //Get Animator component
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        //Play spin animation on key press
        if (Input.GetKeyDown(KeyCode.Q))
        {
            animator.SetTrigger("spinTrigger");
        }
    }
}
  • Adjunte el script AnimationTest.cs a Cube con el componente Animator:

Ahora vamos a probarlo:

Sharp Coder Reproductor de video

Todo funciona como se esperaba, al presionar Q se reproduce la animación.

Artículos sugeridos
Construyendo un Sistema de Menú Interactivo en Unity
Cómo importar animaciones a Unity
Cómo pintar árboles en el terreno en Unity
Cómo hacer un juego inspirado en FNAF en Unity
Cómo elegir la música de fondo adecuada para tu juego en Unity
Activos de uso general imprescindibles para Unity
Tutorial de Unity Cinemachine y Timeline