Cree controladores de animación para sus personajes como lo haría con un guión, de modo que sean lo suficientemente simples como para reutilizarlos, respaldarlos y depurarlos durante todo el 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 árboles de mezcla son excelentes para ocultar la complejidad. Un árbol de mezcla no tiene estado ya que no vuelve a llamar al código. Combina los diferentes clips según los parámetros que definas.
La importancia de esto es que puedes iterar en Blend Trees sin preocuparte por dañar el resto del juego. Puede ocultar una red compleja de estados y evitar errores en el futuro porque no puede vincular el comportamiento a la mayoría de las animaciones en un árbol de combinación.
Es útil pensar en las capas como una clase en un guión. Quiere que todo en una capa cumpla la misma función lógica y de comportamiento. Esto se debe a que cada capa individual controla qué otras capas anula: si afecta o no a ciertos huesos, si esa capa es aditiva, etc.
Los patrones lógicos y reutilizables en las máquinas de estado y subestado aceleran el desarrollo, facilitan la depuración y pueden reducir los errores, al mismo tiempo que permiten que varias personas creen contenido similar.
Las siguientes secciones presentan patrones que son útiles para estructurar sus capas.
Este patrón facilita la depuración, ya que se puede ver claramente que las transiciones salen y regresan al estado vacío. Cada radio del centro debe restablecer cualquier estado que toque.
Los radios son candidatos sólidos para fabricar máquinas subestatales utilizando los siguientes patrones.
Al agrupar los estados en un patrón de “introducción” – ejecución/bucle – “salida”, puede adjuntar claramente cualquier evento de animación o comportamiento de la máquina de estados a los estados de introducción y salida. Al igual que un árbol de mezcla, puedes iterar y cambiar los estados internos de ejecución/bucle sin preocuparte por romper tu juego.
Para animaciones interrumpibles, especialmente animaciones impulsadas por la entrada del jugador, divida el clip en dos partes. Primero, mantenga una sección crítica que contenga todos los cambios de estado, efectos y daños que siempre deben completarse. En segundo lugar, diseñe una animación de asentamiento que se vea bien y que lo haga volver al estado inactivo y que pueda ser interrumpida por nuevas entradas.
Una vez que tus animaciones se comportan y aparecen como deseas, debes retroalimentar el estado de tus animadores al estado de tu juego. Consulte las siguientes secciones para conocer algunos puntos clave a tener en cuenta.
Los comportamientos de la máquina de estados son fragmentos de código que puede adjuntar a cualquier estado de animación. Úselos para vincular comportamientos directamente con el estado del propio animador.
Evite escribir código de juego complejo dentro de ellos porque puede resultar difícil rastrear de dónde provienen los cambios en el estado. Si está utilizando State Machine Behavior para controlar el código del juego, aproveche un sistema de mensajería; hable con una clase de administrador o active su código a partir de parámetros en un nivel superior.
Debug.Break() es uno de los comportamientos de máquina de estados más efectivos que puede utilizar. Adjuntelo en cualquier lugar de su configuración de animación y tendrá un punto de interrupción similar al de un sistema de secuencias de comandos visual.
Utilice código C# cuando corresponda. En lugar de administrar cientos o miles de transiciones, o conectar transiciones AnyState por todas partes, use Animator.Play o Animator.CrossFade para crear dinámicamente transiciones directas a partir del código. Si eso aún no es suficiente control para ti, busca en la API Playables de Unity para encontrar más formas de animar usando código. Algunos ejemplos se pueden encontrar aquí.
Los eventos de animación vinculan un momento específico de tu clip de animación con un cambio de estado específico en tu juego. Se pueden utilizar para resaltar elementos como efectos visuales y sonoros. Sin embargo, si sale de un clip antes de que se disparara, nunca se disparará. Una forma de resolver esto es agregar un comportamiento de máquina de estados que garantice 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.