Domina el flujo de animaciones 2D en Unity con un grafo claro, transiciones precisas y parámetros bien definidos. Aquí verás cómo usar el Animator para alternar entre estados como idle, up, down, left y right, cómo evitar retrasos con Has Exit Time y cómo sincronizar todo desde el script con SetFloat y el Input Manager.
¿Cómo configurar el Animator de Unity para un personaje 2D?
Organizar bien el grafo facilita el mantenimiento y reduce errores. La idea es partir de un estado idle /ˈaɪdəl/ estático y transicionar según el movimiento del jugador.
¿Cómo organizar el grafo de animaciones?
Crea cinco animaciones: up, down, left, right e idle con una imagen estática.
Colócalas como una cruceta: down abajo, up arriba, left a la izquierda, right a la derecha, idle al centro.
Verifica que cada clip “se mueve” correctamente antes de conectar transiciones.
Evita “cajitas” amontonadas: deja espacio para leer el grafo.
¿Cómo definir el estado por defecto idle /ˈaɪdəl/?
Si el personaje arranca en down, cambiará siempre a mirar abajo.
Pulsa botón derecho en idle y elige Set as Default State.
El personaje permanecerá quieto hasta recibir entrada del usuario.
¿Qué parámetros y condiciones controlan las transiciones de animación?
La clave está en dos parámetros float del Animator que reflejan la entrada del jugador: horizontal y vertical. Ambos deben coincidir exactamente con los nombres del Input Manager.
¿Qué parámetros float usar en el Animator?
Crea un parámetro float: horizontal.
Crea un parámetro float: Vertical (V mayúscula, aprovechando los strings definidos).
Su rango es continuo entre −1 y 1.
¿Qué condiciones y umbrales activar para cada dirección?
De idle a up: Vertical > 0.5.
De up a idle: Vertical < 0.5.
De idle a right: horizontal > 0.5.
De right a idle: horizontal < 0.5.
De idle a down: Vertical < −0.5.
De down a idle: Vertical > −0.5.
De idle a left: horizontal < −0.5.
De left a idle: horizontal > −0.5.
Notas prácticas:
Son condiciones complementarias: cuando una es mayor, la otra es menor.
En total, deben quedar ocho transiciones conectadas con sus condiciones.
Alinea flechas para mantener el grafo legible.
¿Cómo evitar el delay por Has Exit Time?
El retraso al girar se debe a Has Exit Time activo en cada transición.
Desmarca Has Exit Time en las ocho transiciones.
Resultado: cambio inmediato al presionar arriba, abajo, izquierda o derecha.
¿Cómo sincronizar el script con el grafo de animaciones?
El Animator necesita recibir, fotograma a fotograma, los valores de los ejes. Para ello, se expone una referencia al componente y se actualizan los parámetros al final de Update.
¿Cómo declarar y obtener el componente Animator?
Declara una variable privada: Animator animator.
Inicialízala en Start con GetComponent<Animator>().
usingUnityEngine;publicclassPlayerControl:MonoBehaviour{privateAnimator animator;voidStart(){ animator =GetComponent<Animator>();}voidUpdate(){// Sincroniza parámetros con el Input Manager. animator.SetFloat("horizontal", Input.GetAxisRaw("horizontal")); animator.SetFloat("Vertical", Input.GetAxisRaw("vertical"));}}
¿Cómo queda la comunicación Animator–Input Manager?
El script envía horizontal y Vertical en tiempo real.
El Animator evalúa condiciones y dispara transiciones.
El movimiento del jugador se refleja en el grafo sin retardos.
Ideas clave que refuerzan buenas prácticas:
Usa idle como estado por defecto para arrancar en reposo.
Define umbrales claros (±0.5) para transiciones estables.
Mantén nombres de parámetros idénticos a los del Input Manager.
Desactiva Has Exit Time para respuestas inmediatas, común en RPGs.
Considera un blend tree más adelante para reducir el número de estados y flechas.
¿Te gustaría ver cómo montar ese blend tree y simplificar el grafo? Deja tus preguntas o dudas en los comentarios.