Buscar en Unity

5 consejos para mantener los controladores del animador muy ordenados

Last updated: December 2018

What you will get from this page: Will Armstrong’s five awesome tips for animator controllers. You’ll get tips for building animator controllers for your characters like you would a script: so they’re efficient to reuse, extend, support and debug, all the way through the development cycle.
All of the screenshots are from animation for the character Henry in Firewatch.

Oculta la complejidad en blend trees

Los blend trees sirven para ocultar la complejidad. Un blend tree no tiene un estado; no efectúa la autenticación en el código. Simplemente, combina los diferentes clips en función de los parámetros que definas.

Esto significa que puedes iterar en los blend trees sin tener que preocuparte de arruinar el resto del juego. Puedes ocultar una red compleja de estados y evitar los errores en el camino, debido a que no puedes enlazar el comportamiento con muchas de las animaciones de un blend tree.

unity-tidy-animators-locomotion-blend-tree

Parece complejo, pero este blend tree de locomoción realmente ayudó a mantener las cosas simples.

Cuando piensas en "capas", piensa en: "una clase de script"

Ayuda a pensar en capas como una analogía aproximada para una clase en un script. Es conveniente que todo lo que se encuentra en una capa sirva a la misma función lógica y conductal. Esto se debe a que cada capa controla lo que anula de las otras capas, independientemente de que afecte a ciertos huesos, independientemente de que la capa sea aditiva, y así sucesivamente.

unity-tidy-animators-states

Todos los estados (states) de la mano izquierda de Henry. Cada capa (layer) tiene un propósito y una jerarquía clara. De esta manera, se puede controlar de forma sencilla y se puede encontrar un estado (state) fácilmente.

Patrones de reutilización

Los patrones lógicos reutilizables en máquinas de estados y subestados aceleran el desarrollo, permiten que varias personas preparen contenidos similares, facilitan la depuración y pueden, de hecho, reducir los errores en general.

Unos pocos patrones que son útiles para estructurar tus capas:

  • Hub and spoke, o centro y radios: Este patrón facilita la depuración, debido a que puedes ver claramente cómo desaparecen las transiciones y luego regresan al estado vacío. Cada radio del centro debe restablecer cada estado que toca. Los radios son buenos candidatos para aplicarlos en las máquinas de subestados, utilizando los patrones que se presentan a continuación.

    unity-tidy-animators-hub-and-spoke

    Un patrón de centro y radios que se utiliza para animar el brazo derecho de Henry.

  • El patrón de entrada compartida / salida compartida: Agrupando los estados en un patrón de "intro" - "ejecución / bucle" - "outro", puedes conectar limpiamente cualquier evento de animación o comportamiento de la máquina de estados con los estados "intro" y "outro". De una manera muy similar a la de un blend tree, luego puedes iterar y modificar los estados "ejecución / bucle" internos sin preocuparte de interrumpir tu juego.

    unity-tidy-animators-entry-to-exit

    Entrada a Salida: Todos los estados de la mano derecha de Henry para sostener un libro; hay otros subestados que ocultan los detalles, por debajo.

  • El patrón de sección crítica y solución: para las animaciones interrumpibles, en especial para las animaciones controladas por el jugador, descompón tu clip en 2 partes. Primero, una sección crítica que contenga todos los cambios de estado, efectos, daños, etc. que siempre deben jugarse para completar el juego. Segundo, una animación de solución que se vea bien devolviéndote al estado inactivo y que pueda interrumpirse mediante una nueva entrada.

    unity-tidy-animators-critical-section-and-settle

    Una vez que tus animaciones estén funcionando y tengan la apariencia que deseas, debes enviar retroalimentación acerca del estado de tus animaciones al estado del juego. Se presenta un par de puntos importantes que debes recordar cuando lo hagas.

No escribas un código complejo dentro de los comportamientos de la máquina de estados

Los comportamientos de State Machine son fragmentos de código que puedes adjuntar a cualquier Animation State. Se utilizan para asociar el comportamiento directamente con el estado del Animator en sí mismo.

Evita escribir código complejo de juego dentro de ellos, pues esto puede hacer que sea difícil determinar de dónde vienen los cambios que tienes en el estado (state). Si utilizas un comportamiento de State Machine para impulsar el código de juego, usa un sistema de mensajería, comunícate con una clase de administrador o activa tu código con parámetros en un nivel superior.

Por último, tenemos mi comportamiento favorito de State Machine: Debug.Break();. Es el comportamiento de State Machine más útil, ya que lo puedes adjuntar en cualquier parte de la configuración de tu animación y tendrás un punto de salida, de forma similar a lo que sucede en un sistema de scripting visual.

No temas utilizar código C# donde sea adecuado. En lugar de tener cientos de miles de transiciones, o colocar transiciones AnyState por todas partes, utiliza Animator.Play o Animator.CrossFade para provocar transiciones directas desde el código de forma dinámica. Si eso aún no te da el control suficiente, puedes revisar nuestra PlayablesAPI para conocer aún más maneras en las que puedes animar con código. Hay algunos ejemplos en https://docs.unity3d.com/Manual/Playables-Examples.html.

Utiliza los comportamientos de la máquina de estados para asegurar que siempre se active un evento de animación

Los eventos de animación enlazan un momento específico de tu clip de animación con un cambio de estado específico del juego; pueden utilizarse para desactivar detalles como los efectos visuales y de sonido. Sin embargo, si haces una transición desde un clip antes de que se haya activado, nunca se activará. Una manera de resolver esto es agregar un comportamiento de la máquina de estados que asegure que el evento siempre se active cuando se alcanza un punto específico en el tiempo, sin importar qué otra cosa ocurra, o no ocurra, en el juego.

unity-tidy-animators-state-machine

Mas recursos

¡Debemos saberlo! ¿Te gustó este contenido?

Sí. Que sigan llegando Me da igual. Podría ser mejor