Explicación detallada del sistema de animación Unity 3: ¿Cómo reproducir y cambiar animaciones?

Resumen: [Advertencia de artículo largo, se recomienda marcar primero] Después de tener un modelo y múltiples animaciones, ¿cómo controlar su reproducción y cambio en Unity? Este artículo lo lleva a través de un análisis integral del módulo Animator de Unity.

La Academia Hongliu te hará unos pasos más rápido. Hola, soy un recién llegado que está aprendiendo Unity de Dazhi. Mi nombre es Xiaoxin. He venido a revisar (yu) aprender (xi) el sistema de animación juntos en las últimas semanas.

Dazhi: "Xiaoxin, ¿todavía recuerdas las fuentes de animación de Unity?"

Xiaoxin: "Hay dos tipos de producción en Unity e importación externa, ¡oh, sí! También puedes usar código para escribir animaciones, pero yo no puedo, jeje"

Dazhi: "Así es, lo que aprendimos en los dos primeros días fue principalmente el contenido de Animation Clip, es decir, una animación correspondiente a un objeto, que es el elemento básico de todo el sistema de animación. Hoy nos centraremos en aprender Animator Si compara Animation Clip con Si es un video, entonces Animator es un reproductor de video, que se usa para controlar la reproducción, el cambio, etc. de múltiples videos”.

Componente animador

Para reproducir una animación en un objeto, debe agregar el componente Animator al objeto.

Un atributo muy importante en Animator es Controller , que se refiere a un recurso llamado Animator Controller , que se almacena en el proyecto como un archivo, que almacena varios estados de animación y cambia entre estados. Se discutirá en detalle en la segunda mitad de este artículo.

La asignación de nodos óseos utilizada por la configuración de Avatar .

Aplicar movimiento raíz aplica el movimiento del nodo raíz. Si no está habilitado, el nodo raíz permanecerá en su lugar cuando se reproduzca la animación y deberá controlar el movimiento del objeto a través de secuencias de comandos. Si está habilitado, si hay movimiento en la animación, el movimiento en la animación se traducirá al nodo raíz y el nodo raíz se moverá. (Generalmente se usa para la animación en movimiento de personajes/animales)

El modo de actualización establece el tiempo de actualización de Animator y la configuración de la escala de tiempo.

  • Normal Animator se actualiza de forma normal (a medida que se actualiza la llamada de actualización, cuando la escala de tiempo disminuye, la reproducción de la animación también se ralentiza. El significado específico y el uso de la escala de tiempo se explicarán en detalle más adelante)
  • Animate Physics Animator se actualizará de acuerdo con la frecuencia del sistema físico (actualizado de acuerdo con la llamada FixedUpdate, que se explicará en detalle más adelante), y es adecuado para la interacción física. Por ejemplo, un personaje con propiedades físicas puede empujar otros objetos. alrededor.
  • El tiempo sin escalar se actualiza de acuerdo con la llamada de actualización, independientemente de la escala de tiempo. Generalmente se usa para la interfaz de la interfaz de usuario, cuando usa la escala de tiempo para pausar el juego, la interfaz mantiene la animación normal.

Modo de recorte del modo de selección

  • La animación de Always Animate sigue ejecutándose, incluso si el objeto se recorta de la pantalla y no se renderiza.
  • Cull Update Transforms Cuando el objeto no está visible, deshabilite la actualización de Retarget, IK y Transforms (el módulo avanzado de animación de seguimiento lo explicará en detalle)
  • Cull Completamente deshabilita la animación por completo cuando el objeto no es visible

Controlador animador

El controlador Animator es un recurso necesario para el componente Animator.Este recurso se almacena en el proyecto en forma de archivo, que almacena varios estados de la animación y reglas de cambio entre estados.

Hay dos archivos de Animator Controller en la imagen de arriba

Por lo general, hay más de una animación en un objeto, el uso de Animator Controller puede administrar fácilmente las animaciones y cambiar entre animaciones. Por ejemplo, hay animaciones para caminar, correr, saltar y ponerse en cuclillas en el personaje, y se pueden administrar fácilmente con el controlador de animación. Sin embargo, incluso si solo hay una animación, aún debe agregar el componente Animator al objeto de animación para reproducir la animación.

Dazhi dijo antes que puedes usar PlayableAPI para omitir el Animator Controller para reproducir animaciones Si estás interesado, puedes echar un vistazo.

Animator Controller utiliza una tecnología llamada State Machine (máquina de estado) para administrar estados y cambiar entre estados.

máquina de estado StateMachine

La máquina de estados consta de State (estado) y Transition (transición). State representa un estado En Animator Controller, un estado puede contener una animación, una máquina de subestado o un árbol híbrido (más sobre esto más adelante). La transición se utiliza para establecer las condiciones de cambio entre estados. Generalmente, habrá una o más condiciones para cambiar de un estado a otro.

En la ventana de Animator, puede visualizar el Estado y la Transición.

Crear controlador de animador¶

Hay varias formas de crear recursos de Animator Controller:

  • Al crear un clip de animación en Unity, si no hay un componente Animator en el GameObject seleccionado, el componente Animator se agregará automáticamente y se creará un archivo de controlador de Animator en el proyecto (mismo directorio que el archivo del clip de animación).
  • Al arrastrar cualquier clip de animación a un objeto, si no hay un componente de Animator en el objeto arrastrado, el componente de Animator se agregará automáticamente y se creará un archivo de controlador de Animator en el proyecto (mismo directorio que el archivo de Clip de animación).
  • El archivo Animator Controller se puede crear manualmente en la ventana Proyecto, como se muestra en la siguiente figura:

Crear archivo de controlador de animador

Editar controlador de animador

Haga doble clic en el archivo Animator Controller para abrir la ventana Animator para editar el archivo.

Hoy aprenderemos brevemente cómo reproducir la animación importada, y el módulo avanzado de animación posterior explicará las funciones avanzadas en Animator Controller con más detalle.

Cuando se crea un controlador de animador directamente en la ventana del proyecto, no contiene animaciones. Como se muestra abajo:

El gráfico contiene tres nodos:

Entrada entrada . La máquina de estado de animación comienza desde este nodo y entra en un estado predeterminado de acuerdo con la Transición.

Cualquier estado Cualquier estado. Se utiliza para la transición de cualquier estado a un estado específico. Por ejemplo, en los juegos de disparos, si te alcanza una bala, no importa en qué estado te encuentres, caerás al suelo y morirás.

Exit sale de la máquina de estado. Generalmente se usa para la salida de la máquina de estados anidados (el módulo de animación avanzada hablará de esto más adelante).

añadir estado

Puede hacer clic con el botón derecho en el espacio en blanco para agregar Estado vacío o arrastrar el archivo Clip de animación a la ventana de Animator para agregar un Estado.

Si un clip de animación está actualmente seleccionado en la ventana del proyecto, también puede crear un estado a través del clip seleccionado en la figura anterior, pero es más fácil arrastrar el clip directamente al animador para crear un estado, como se muestra en la figura. abajo.

Arrastre y suelte para agregar State.gif

El primer estado creado es naranja de forma predeterminada, lo que representa el estado predeterminado. Hay una flecha amarilla que apunta desde la Entrada al Estado naranja. El componente Animator reproducirá New State al principio, y si hay animación en New State, también reproducirá la animación correspondiente.

En este momento, si reproduce esta escena, la configuración de un objeto reproducirá la animación del estado predeterminado.

Configuraciones de estado

Cada Estado puede contener un Clip de Animación, y el objeto donde se encuentra el componente Animador reproducirá la animación cuando esté en este Estado. Cuando se selecciona un estado, se puede ver lo siguiente en el Inspector:

Motion puede establecer un clip de animación. Si se trata de una animación creada a partir de un clip de animación, ya debería haber una animación aquí, y también puede seleccionar una animación del proyecto.

Velocidad de reproducción de animación de velocidad

Multiplicador multiplicador , puede usar un parámetro para controlar la velocidad de reproducción de la animación, y la velocidad de reproducción final de la animación será Velocidad * Multiplicador. Los parámetros del Animator y cómo controlar los parámetros en el código se explicarán más adelante.

El tiempo normalizado es un tiempo unificado con un rango de 0-1, que necesita ser controlado por parámetros.

Animación espejo espejo . También se puede controlar con un parámetro.

Compensación de ciclo compensación de ciclo. Animaciones que se pueden utilizar para sincronizar bucles. El desplazamiento usa tiempo unificado y el rango es 0-1. También se puede controlar mediante parámetros.

Foot IK solo se usa para animación humanoide. Si los pies del personaje usan cinemática inversa.

Si escribir valores predeterminados inicializa los parámetros que no usa el estado a los valores predeterminados.

Transiciones Las transiciones de estado en las que participa este estado. Entrará en detalle a continuación.

Parámetros

Mencionamos el concepto de parámetros arriba, entonces, ¿qué son los parámetros?

Los parámetros en Animator Controller se pueden usar como condiciones para controlar el cambio de transición y también pueden controlar las propiedades que se pueden parametrizar anteriormente, como varias propiedades en State.

El estado puede usar parámetros como fuente de valores de atributos

Los parámetros del controlador de Animator se pueden controlar mediante código y luego controlar el funcionamiento de toda la máquina de estado de Animator.

Hay 4 tipos de parámetros:

  • tipo entero int
  • Tipo flotante de coma flotante (decimal)
  • Bool verdadero o falso (verdadero o falso, utilizado para el juicio lógico), que se muestra como una casilla de verificación en la interfaz
  • Trigger trigger, similar a Bool, pero la transición se establecerá automáticamente en estado falso después de usar este parámetro. Se muestra como un botón circular en la interfaz.

Transición

La transición representa la condición de cambio entre estados. Generalmente, habrá una o más condiciones para cambiar de un estado a otro.

Agregar transición

Haga clic con el botón derecho en un estado y seleccione Hacer transición en el menú emergente para crear una transición a otros estados.

Aumentar la transición

Haga clic en la flecha que representa la Transición para ver los detalles de esta Transición en el Inspector. Seleccione el Estado de origen de la Transición (desde qué Estado), y también puede ver la información específica de esta Transición en el Inspector del Estado.

Transiciones muestra la Transición actualmente seleccionada. Hay dos casillas de verificación detrás que incluyen Solo y Mute.

  • Solo Si hay varias transiciones entre dos estados, después de marcar esta opción, solo tendrá efecto la transición Solo seleccionada. Se desactivarán otras transiciones.

Por ejemplo, si Transition1 se establece en Solo, solo tendrá efecto 1 de las 3 transiciones del estado de origen al estado de destino.

  • Después de que Mute marque esta opción, la Transición se desactivará. Si se seleccionan tanto Solo como Mute, Mute tendrá efecto primero.

Nombre Cuadro de nombre de campo. Como se muestra en la figura anterior, se puede nombrar la transición, lo cual es muy útil para distinguir múltiples transiciones entre dos estados.

Si tiene tiempo de salida tiene una condición de tiempo de salida. El tiempo de salida es una condición de transición especial. No depende de los parámetros (descritos a continuación), pero realiza transiciones de estado basadas en el punto de tiempo de salida establecido como condición.

Algunos ajustes de parámetros de la transición Ajustes .

  • Tiempo de salida Si se marca Tiene tiempo de salida , este parámetro se puede configurar para establecer el tiempo unificado para la salida de la animación. Por ejemplo, si se establece en 0,75, significa que será verdadero cuando la animación alcance el 75 %, si no hay otras condiciones, cambiará directamente al siguiente estado.

    Si el tiempo de salida es inferior a 1, la condición será verdadera cada vez que el estado se repita en la posición correspondiente (independientemente de si la animación está configurada en bucle, el estado siempre se repite). Por ejemplo, cuando la primera reproducción alcanza el 75 % y la segunda reproducción alcanza el 75 %, la condición de salida será verdadera.

    Si el tiempo de salida es mayor que 1, la condición solo se verificará una vez. Por ejemplo, si el tiempo de salida es 3,5, la animación del estado será verdadera cuando alcance el 50 % de la cuarta vez después de repetir 3 veces.

  • Cuando se marca Duración fija , la unidad del parámetro Duración de transición a continuación es segundos. Cuando no se marca, el parámetro se utilizará como un porcentaje.

  • Duración de la transición transición tiempo de transición. Cuando dos estados están en transición, generalmente no pasarán de un estado a otro instantáneamente, sino que se combinarán suavemente. Esta propiedad es para establecer el tiempo de combinación suave. El tiempo de transición se puede ver en las dos flechas azules en la imagen a continuación.

  • Compensación de transición La compensación de tiempo en la que el estado de destino comienza a reproducirse. Por ejemplo, si se establece en 0,5, al cambiar al siguiente estado, comenzará a reproducirse desde la posición del 50 %.

Cuando se establece en 0,5 como se muestra en la figura, el siguiente estado comenzará a convertirse desde el 50 %

  • Los dos parámetros Fuente de interrupción e Interrupción ordenada se pueden utilizar para controlar la interrupción de la transición. Los detalles se explicarán a continuación.

Diagrama de transición

Los parámetros anteriores no solo pueden modificar los valores manualmente, sino también previsualizarlos y modificarlos a través del diagrama de Transición.

Condiciones

Una transición puede tener una condición, múltiples condiciones o incluso ninguna condición.

Si no hay ninguna condición en Condiciones, pero se marca Tiene tiempo de salida, entonces el tiempo de salida se usará como la condición para la salida del estado, y cuando se alcance el tiempo de salida , se cambiará al siguiente estado.

Si hay una o más condiciones, deben cumplirse al mismo tiempo para cambiar al siguiente estado.

Una condición puede ser:

  • Juicio de igualdad/desigualdad, verdadero cuando un parámetro es igual/diferente a una constante (int, float, parámetros de tipo bool)
  • Juicio de comparación, el resultado de la comparación de un parámetro y una constante (int, parámetros de tipo flotante)
  • disparador, verdadero cuando el disparador está activo

Si se marca Tiene tiempo de salida y hay una o más condiciones en la transición, entonces la transición debe cumplir con el tiempo de salida al mismo tiempo y todas las condiciones son verdaderas antes de cambiar al siguiente estado.

Una transición debe tener al menos una condición (se puede usar Tiene tiempo de salida como condición); de lo contrario, se ignorará la transición.

【Lectura seleccionada】Interrupción de transición

Mencionamos antes que los dos parámetros Fuente de interrupción e Interrupción ordenada se pueden usar para controlar la interrupción de la transición. Entonces, ¿qué es exactamente una interrupción de transición?

En general, las transiciones del sistema de animación no se pueden interrumpir: una vez que una transición comienza a cambiar de un estado a otro, no hay forma de interrumpirla. Como un pasajero en un vuelo transatlántico, te sientas cómodamente en tu asiento hasta que llegas a tu destino, incapaz de cambiar de opinión. Para la mayoría de los usuarios, esto está bien.

Pero si necesita más control sobre las transiciones, el sistema de animación se puede configurar de varias maneras para satisfacer sus necesidades. Si no está satisfecho con su destino actual, puede saltar al asiento del piloto y cambiar de planes en pleno vuelo. Esto permite un control de animación más flexible, pero también tiene una alta probabilidad de perderse en interrupciones complejas.

Exploremos las interrupciones en profundidad con algunos ejemplos. Comience con una máquina de estado bastante simple que tenga cuatro estados, etiquetados de la A a la D, y use un activador como condición para cada transición.

De forma predeterminada, cuando se activa el cambio de A a B, la máquina de estado comienza a cambiar a B y no se puede cambiar antes de cambiar a B. Sin embargo, si la propiedad de fuente de interrupción de la transición de A->B se cambia de Ninguno a Estado actual, el cambio de A a B puede ser interrumpido por algunos disparadores en A.

¿Por qué solo algunos ? Porque el atributo de Interrupción Ordenada también está marcado por defecto. Esto significa que solo se pueden interrumpir las transiciones con una prioridad superior a la actual. Seleccione el estado A y visualícelo en el Inspector. Vemos que A -> C tiene una prioridad más alta que A -> B, lo que significa que solo A -> C puede interrumpir la conversión de A -> B.

Si activamos el gatillo A->B y luego activamos inmediatamente el gatillo A->D, la transición de A a B no se interrumpirá. Sin embargo, si activamos el disparador A->B y luego activamos inmediatamente el disparador A->C, la transición de A a B se interrumpirá y cambiará a C en su lugar.

Dentro del sistema de animación, se registra el estado de la animación cuando se interrumpió y luego se combina desde el estado interrumpido a la nueva animación de destino.

¿Qué sucede si no marca el atributo Interrupción ordenada ? Tanto A->C como A->D pueden interrumpir la transición de A -> B. Sin embargo, si los activadores A->C y A->D se activan en el mismo cuadro, A->C se activará primero porque A->C tiene una prioridad más alta.

Si cambia el atributo de fuente de interrupción de A -> B a Siguiente estado, es el siguiente estado. A->C y A->D no pueden interrumpir A -> B. Si activamos el disparador A->B y luego activamos inmediatamente el disparador B->D, la transición de A a B se interrumpirá y cambiará a D en su lugar.

El orden de las Transiciones en B también importa. Pero en este momento, el atributo Interrupción ordenada no se puede verificar (porque A -> B está en el estado A pero no en el estado B, y no participa en la clasificación de B). El orden de las transiciones en B determinará qué transición se usará cuando se activen simultáneamente. Por ejemplo, en la secuencia que se muestra en la figura siguiente, si se activan B->D y B->C en el mismo cuadro, se ejecutará la transición de B->D.

Si queremos un control completo, podemos establecer la propiedad de fuente de interrupción en Estado actual, luego estado siguiente o Estado siguiente, luego estado actual. Cuando se establece en estos dos valores, se tendrán en cuenta las transiciones tanto en el Estado A como en el Estado B. Por ejemplo, la configuración es la siguiente y se selecciona Estado actual y luego estado siguiente:

¿Qué sucede si A->C, A->D, B->C y B->D están activos simultáneamente al cambiar de A a B?

Si se selecciona Interrupción ordenada , A->D puede ignorarse primero (porque tiene menor prioridad que A->B). Luego considere el estado actual A primero, luego A->C ganará, y ni siquiera necesita considerar el estado siguiente B.

Si la misma configuración solo activa B->C y B->D, entonces B->D ganará, porque B->D tiene una prioridad más alta que B->C.

resumen

Arriba solo usamos el caso de A->B como ejemplo para explicar, otras interrupciones son similares, solo necesitan seguir sus propias reglas.

Es muy importante recordar que no importa cuántas interrupciones ocurran, mientras la transición no se complete, el estado de origen permanecerá sin cambios. Por ejemplo, A->B es interrumpido por B->C y luego interrumpido por C->D. Antes de que se complete la transición, el estado de origen siempre será A. Animator.GetCurrentAnimatorStateInfo() también devuelve el Estado A.

En resumen, los descansos de transición son poderosos y brindan mucha flexibilidad, pero pueden volverse muy confusos. Por lo tanto, use las interrupciones de transición de manera razonable y asegúrese de probar más en el editor.

Resumir

Hoy hablé sobre el componente Animator, espero que puedas recordar algunos puntos:

  • Si se compara Animation Clip con un video, entonces Animator es un reproductor de video, que se utiliza para controlar la reproducción, el cambio, etc. de múltiples videos.
  • Animator Controller es un script que se utiliza para indicar al reproductor de video cómo reproducir varios videos.

preguntas para hoy

Dazhi: "Importa el paquete de personajes en Standard Assets y mira cómo está configurado el Animator Controller".
Xiaoxin: "Está bien~"
Dazhi: "¡No olvides compartir la cosecha! No olvides hacer clic en la parte inferior derecha rincón para invitar a amigos a ver Compártelo con tus amigos de forma gratuita, tal vez pueda ayudarlo ".

Otras lecturas

[Aprendizaje extendido]动画 Puede leer todos los artículos de esta serie respondiendo a la cuenta oficial de la Academia Hongliu , ¡y hay aún más tutoriales en video esperándolo!


Huh ~ El balbuceo de Xiaoxin es realmente suficiente hoy. Los comentarios son bienvenidos si no lo deja claro, exploremos juntos.

Soy Dazhi (WeChat: zhz11235), su pionero de la tecnología, ¡hasta la próxima!

¡no te vayas! Me gusta , colecciónalo !

Está bien, puedes irte.

Supongo que te gusta

Origin blog.csdn.net/zhenghongzhi6/article/details/106459895
Recomendado
Clasificación