
Crea controladores de animador para tus personajes como lo harías con un script, para que sean lo suficientemente simples de reutilizar, soportar y depurar a lo largo del ciclo de desarrollo.
Todas las capturas de pantalla a continuación provienen de la animación del personaje Henry en Firewatch de Campo Santo.

Los Blend Trees son excelentes para ocultar complejidad. Un Blend Tree no tiene estado ya que no llama de vuelta al código. Se mezcla entre los diferentes clips según los parámetros que defines.
La importancia de esto es que puedes iterar en los Blend Trees sin preocuparte por romper el resto de tu juego. Puedes ocultar una compleja red de estados y prevenir errores en el futuro porque no puedes atar el comportamiento a la mayoría de las animaciones en un Blend Tree.

Ayuda pensar en las capas como una clase en un script. Quieres que todo en una capa sirva tanto a la misma función lógica como de comportamiento. Esto se debe a que cada capa individual controla qué otras capas anula, ya sea que afecte a ciertos huesos, si esa capa es aditiva, y así sucesivamente.
Patrones lógicos y reutilizables en máquinas de estado y subestado aceleran el desarrollo, facilitan la depuración y pueden reducir errores, todo mientras permiten que múltiples personas creen contenido similar.
Las siguientes secciones presentan patrones que son útiles para estructurar tus capas.

Este patrón facilita la depuración ya que puedes ver claramente las transiciones salir y volver al estado vacío. Cada radio del hub debe restablecer cualquier estado que toque.
Los radios son candidatos sólidos para crear máquinas de subestado utilizando los siguientes patrones.

Al agrupar estados en un patrón de "introducción" - ejecución/bucle - "salida", puedes adjuntar de manera limpia cualquier Evento de Animación o Comportamientos de Máquina de Estado a los estados de introducción y salida. Al igual que un Árbol de Mezcla, puedes iterar y cambiar los estados de ejecución/bucle internos sin preocuparte por romper tu juego.

Para animaciones interrumpibles, especialmente animaciones impulsadas por la entrada del jugador, divide tu clip en dos partes. Primero, mantén una sección crítica que contenga todos los cambios de estado, efectos y daños que deben reproducirse siempre hasta el final. Segundo, elabora una animación de asentamiento que se vea bien al volver a la inactividad y que pueda ser interrumpida por nueva entrada.
Una vez que tus animaciones se comporten y aparezcan como deseas, necesitas retroalimentar el estado de tus animadores en el estado de tu juego. Consulta las siguientes secciones para algunos puntos clave a tener en cuenta.
Los Comportamientos de Máquina de Estado son fragmentos de código que puedes adjuntar a cualquier Estado de Animación. Úsalos para vincular comportamientos directamente al estado del animador en sí.
Evita escribir código de juego complejo dentro de ellos porque puede volverse difícil rastrear de dónde provienen tus cambios en el estado. Si estás utilizando el Comportamiento de Máquina de Estado para impulsar el código de juego, aprovecha un sistema de mensajería; habla con una clase de administrador o activa tu código a partir de parámetros en un nivel superior.
Debug.Break() es uno de los Comportamientos de Máquina de Estado más efectivos que puedes usar. Adjúntalo en cualquier lugar de tu configuración de animación y tendrás un punto de interrupción similar al de un sistema de scripting visual.
Usa código C# donde sea apropiado. En lugar de gestionar cientos o miles de transiciones, o conectar transiciones de AnyState por todas partes, usa Animator.Play o Animator.CrossFade para crear dinámicamente transiciones directas desde el código. Si eso aún no es suficiente control para ti, investiga la API de Playables de Unity para más formas de animar usando código. Se pueden encontrar algunos ejemplos aquí.

Los Eventos de Animación vinculan un momento específico de tu Clip de Animación a un cambio específico de estado en tu juego. Pueden ser utilizados para activar elementos como efectos visuales y sonoros. Sin embargo, si transicionas fuera de un clip antes de que se active, entonces nunca se activará. Una forma de resolver esto es agregar un Comportamiento de Máquina de Estado que asegure que el evento siempre se active cuando se alcance un punto específico en el tiempo, sin importar qué más suceda (o no suceda) en el juego.