¿Cómo evitar los espaguetis en el animador?


9

Estoy trabajando con animaciones en Unity y hasta ahora solo he realizado cuatro (Arriba, Abajo, Izquierda y Derecha) y mi ventana de animación se ve a continuación ... ingrese la descripción de la imagen aquí

El problema es que si me estaba moviendo hacia arriba, quiero que el héroe permanezca mirando hacia arriba, no ir a 'ralentí neutral' (o como quiera que haya comenzado), pero eso significa que tengo 4 posiciones inactivas ... y cada uno de ellos puede pasar a Arriba, Abajo , Izquierda o derecha y van exponencialmente con cada acción adicional ...

Lo que me hace sentir que estoy haciendo algo mal ...

¿Hay una mejor manera de hacer transiciones entre diferentes acciones?


He estado tratando de hacer esto por mucho tiempo. Lamentablemente, mi conclusión es que simplemente no puedes. Animator SIEMPRE se convierte en una red de espagueti y tenemos que vivir con él. Sin embargo, eche un vistazo a este video, le ayuda a youtube.com/…
importa

Respuestas:


9

Puede resolver este tipo de problema con BlendTrees (en general, es una buena idea confiar en los árboles de mezcla). El árbol de mezcla es una especie de estado de animación múltiple que, en función de un parámetro (flotante), decide cuál de las animaciones que contiene está actualmente activa (o, como alternativa, la animación resultante puede ser una mezcla de varias animaciones). Incluso cuando las animaciones no se mezclan, sino que se intercambian, el intercambio ocurre a mitad de la animación (es decir, si la animación "saliente" está al 35%, la nueva se reproduce desde el 35% hacia adelante). Desde el "exterior", todo esto está oculto como si fuera un estado simple / único.

Por ejemplo, tiene un árbol de mezcla con 8 animaciones de sprites (inactivo con 4 direcciones principales y 4 diagonales). Hay 2 parámetros en este árbol de mezcla: "horizontal" y "vertical". Y basándose en esos 2 parámetros, el árbol de mezcla decidirá qué animación reproducir. Según el parámetro "horizontal", el árbol de mezcla elegirá entre la animación izquierda / derecha y el parámetro "vertical" decidirá la animación superior / inferior. Luego, cuando se combinan, tendrás las 8 animaciones con diagonales (es la misma idea que está detrás de los joypads / joysticks).

ingrese la descripción de la imagen aquí

Es un poco confuso, así que, incluso si a StackExchange no le gustan los enlaces, vincularé breve video de ejemplo que hice. Observe la parte superior derecha de la pantalla. Los puntos grises son los "estados" / animaciones y el activo es el que se cierra al punto rojo. Como se dijo al principio, puede ser aún más complejo y cada animación tiene una influencia / fuerza basada en su distancia al punto rojo, lo que resulta en una mezcla entre varias animaciones.

Desde el exterior es solo un estado (árbol de mezcla) y cuando aplica el mismo concepto para caminar y atacar tendrá solo 3 estados vinculados.

Los árboles de mezcla se crean con un clic derecho en un área vacía del Animador Crear estado -> Desde nuevo árbol de mezcla. A partir de ahí, todo está en el Inspector. Con el árbol de mezcla seleccionado, puede elegir el tipo de árbol de mezcla (1D, 2D, etc.), agregar animaciones, colocarlas (en relación con los valores de los parámetros) y seleccionar los parámetros de control.

Si desea obtener más información sobre Blend Trees, a continuación encontrará videos de Unity - Unite 2016 y Unity Tutorials .


2

El problema aquí es que está intentando vincular todo en lugar de usar un disparador para cambiar entre inactivos. Debería elegir la animación inactiva utilizando un if-else o un tipo de condicional de switch-case. Hice un diagrama que se ve mucho más ordenado (suponga que uno de ellos es el caso predeterminado):

ingrese la descripción de la imagen aquí

Información adicional:

Eche un vistazo a Parámetros de animación sobre cómo establecer parámetros para que el animador los reconozca, Máquinas de estado para combinar animaciones, Comportamientos de máquina de estado para ver cómo verificar las variables que ha establecido.


Hola John, pero ¿cómo lo hago realmente? ¿Por qué usaría el gatillo para cambiar entre inactivos o cambiar entre inactivos? ¿Cómo elijo la animación inactiva usando si no? También en el diagrama, ¿por qué me movería a inactivo y luego a izquierda y no a la izquierda y entraría en inactivo esperando la próxima acción, o esto debería ser al revés?
Matas Vaitkevicius

@MatasVaitkevicius Puede establecer y verificar variables al final o al inicio de las animaciones. Puede hacer una animación vacía que no haga nada más que verificar el caso y luego redirigirlo a la siguiente parte o hacer una capa de abstracción. He incluido algunos enlaces a los manuales para más información.
John Hamilton

Entonces, ¿cómo hago si más con parámetros que cambiarían las transiciones? No hay ningún ejemplo de que todos los mecanismos que vinculó solo hagan la transición manual como hice en la pregunta ...
Matas Vaitkevicius

@MatasVaitkevicius Realmente deberías buscar un poco primero: gamedev.stackexchange.com/questions/103611/…
John Hamilton

Pero así es como lo he hecho. dispara los disparos de acción y comienza la animación, luego pasa a inactivo para esa dirección ... Ahora, lo que estás diciendo (si te entiendo correctamente) que podría después de la animación en lugar de ir a inactivo para esa dirección, cambia el mecanismo que elegirían inactivo apropiado para mí ... pero no he visto a un tal mecanismo en cualquier lugar, ¿podría copiarlo en su respuesta por favor ....
Matas Vaitkevicius
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.