Las piezas#
El sistema de animación tiene tres conceptos que se montan en la ventana Animator:
- Estados: cada uno reproduce una animación (Idle, Correr, Saltar).
- Transiciones: flechas entre estados, con condiciones sobre parámetros.
- Parámetros: variables (Float, Int, Bool, Trigger) que tu código cambia para disparar las transiciones.
La idea clave: desde el código no reproduces animaciones directamente; cambias parámetros, y el Animator decide a qué estado transicionar.
Los tipos de parámetro#
| Tipo | Para qué | Se cambia con |
|---|---|---|
Float | Valores continuos (velocidad) | SetFloat |
Bool | Estados sostenidos (en el aire) | SetBool |
Int | Selección numérica (tipo de arma) | SetInteger |
Trigger | Un disparo puntual (atacar, saltar) | SetTrigger |
Controlarlo desde código#
using UnityEngine;
[RequireComponent(typeof(Animator))]
public class AnimacionJugador : MonoBehaviour
{
private Animator anim;
private Rigidbody2D rb;
void Awake()
{
anim = GetComponent<Animator>();
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
// Velocidad para pasar de Idle a Correr (parámetro Float)
anim.SetFloat("Velocidad", Mathf.Abs(rb.linearVelocity.x));
// ¿Está en el aire? (parámetro Bool)
anim.SetBool("EnAire", Mathf.Abs(rb.linearVelocity.y) > 0.1f);
// Ataque: disparo puntual (parámetro Trigger)
if (Input.GetKeyDown(KeyCode.Z))
anim.SetTrigger("Atacar");
}
}anim.SetFloat("Velocidad", x) busca el parámetro por nombre cada vez. Si lo llamas mucho, cachea el hash: int velId = Animator.StringToHash("Velocidad"); y usa anim.SetFloat(velId, x). Es una micro-optimización, pero gratuita.
Trigger vs Bool: no los confundas#
- Bool: un estado que se mantiene (estás en el aire hasta que dejas de estarlo). Tú lo pones a
truey afalse. - Trigger: un aviso puntual que se consume automáticamente al usarse (atacar una vez). No hay que "apagarlo".
Si disparas un Trigger pero la transición no llega a ocurrir (por ejemplo, el estado destino no está conectado), el trigger queda "pendiente" y puede dispararse más tarde de forma inesperada. Asegúrate de que toda transición con Trigger tiene un camino válido, o usa ResetTrigger si necesitas cancelarlo.
Blend Trees: mezclar animaciones#
Un Blend Tree mezcla suavemente varias animaciones según un parámetro. El caso típico: un solo estado "Locomoción" que combina Idle → Andar → Correr según la velocidad, sin transiciones bruscas. En vez de tres estados y flechas, un blend tree con el parámetro Velocidad.
Animation Events#
Puedes marcar un fotograma concreto de una animación para que llame a un método de tu script. Ejemplos: reproducir el sonido del paso justo cuando el pie toca el suelo, o aplicar daño en el frame exacto del golpe de espada.
// Un Animation Event en el clip de ataque puede llamar a este método
public void MomentoDeImpacto()
{
Debug.Log("¡La espada golpea ahora!");
}Errores frecuentes#
- Intentar reproducir animaciones "a mano" en vez de mediante parámetros y transiciones.
- Confundir Bool (sostenido) con Trigger (puntual).
- Transiciones con Has Exit Time activado cuando quieres una respuesta inmediata (desactívalo para acciones que deben cortar al instante).
- Nombres de parámetro mal escritos: no dan error, simplemente no hacen nada.
Ponte a prueba#
Resumen#
El Animator es una máquina de estados visual: estados con animaciones, transiciones con condiciones y parámetros que tu código cambia (SetFloat, SetBool, SetTrigger). Usa Bool para estados sostenidos y Trigger para acciones puntuales, blend trees para mezclar locomoción y Animation Events para sincronizar sonido/daño con el fotograma exacto.