Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Temas recientes

Combinar Animaciones

Iniciado por Gerardo, Octubre 08, 2018, 05:44:16 PM

Tema anterior - Siguiente tema
He intentado hacer que un personaje camine y al mismo tiempo dispare, por ejemplo en el juego de Megaman, la animación de las piernas se mantiene igual sólo se modifica el brazo del personaje. Por más que he dado vueltas al tema no lo he logrado. Es posible hacerlo? Y de ser así, cómo podría ser?
 
Ojala pueda conseguir alguna ayuda para orientarme, gracias.
 
 
 
 

Realmente puedes hacer una nueva que combine las dos, si quieres que camine mientras dispara puedes hacer una animación que mueva las piernas y que se mueva el arma, por ejempo...

Ahora es cuando explico la batallita de turno:
 
¿Sabes por qué los gráficos de los juegos de consolas antiguas se guardaban en bloques cortados? Porque no cabían enteros en memoria...
 

 
Los Artistas primero dibujaban todo el sprite, y luego se usaba un programa que recortaba los gráficos a bloques de ese tamaño concreto. De esta forma todos los sprites cabían perfectamente en bloques cortados al tamaño que la consola los pudiera cargar rápidamente. Luego, mediante código, se componían los sprites en base a combinaciones de múltiples sprites...
 

 
Pues bien, esta limitación presenta una ventaja adicional: Permitía a los animadores y artistas a poder tener por separado el torso superior del personaje, de su parte inferior con las piernas. Además, ello permitía el omitir copias de partes que no se usaran en según qué animaciones, como caminar, etc..
 
Y eso permitía que luego pudieras combinar estados de animación:
 

  •    "Disparo mientras estoy saltando"


  •    "Me cubro mientras recibo un impacto y soy lanzado hacia atrás"


  •    etc, etc.


 
 
Así que con el tiempo, esa técnica se ha ido convirtiendo en una práctica común, y es una de las soluciones que puedes usar. Realmente lo que debes determinar es qué estado corresponde a cada parte del cuerpo (superior o inferior). Ojo, no es la única forma de hacerlo..
 
Hay que comentar que este método tampoco es perfecto y tiene sus propias desventajas. A veces el arte del sprite te obliga a mezclar partes del cuerpo en la misma zona, que vuelve imposible combinar la parte superior con otra inferior no pensada inicialmente. Ahí es dónde entraba la habilidad del artista para dibujar todo de forma flexible y reciclable...
 
 
 
También puedes implementar algo que se llama un "blending tree", o árbol de mezclado. Lo tienes en el manual del Meccanim, en Unity3D.
 
Lo que permite es que le pases múltiples estados diferentes (animaciones) de una acción, y dependiendo de lo que necesites y los valores que le pases, el Mecannim elegirá un estado final u otro. Se usa a menudo para hacer la lógica de animaciones de la transición "Idle -> caminar/correr", o forzar el movimento hacia la izquierda o la derecha.
 
 
 
Realmente es un problema de árbol de decisiones y lógica, que requiere exponer bien claro qué situaciones se pueden dar para todas las acciones del Player, cómo pueden llegar a combinarse, y si es necesario hacer una animación única para ese caso concreto...
 
 
 
¡Mucha suerte!

Mira: 

Un ejemplo real que tenía por el disco, era para un remake del Jetpac. No es exactamente como dice @pioj pero es muy parecido, en el que se ha comentado utilizas los trozos  u los combinas en el juego y en el que yo te pongo haces los trozos para ahorrarte trabajo en la animación, la diferencia es que con el sistema que yo te pongo el trabajo lo haces en el programa de diseño (Photoshop en este caso o lo que uses tu) y generas los sprites que luego incorporas a Unity, mientras que en el que te han contado generas los trozos, los incorporas a Unity y luego los cambias de la forma que te sea mas conveiente. ¿Ventaja del sistema que yo te pongo?, que puedes hacer mezclas de gráficos muy detalladas, por ejemplo mira los brazos como se mueven sobre el Jetpac,  ¿Ventajas del otro sistema? Ocupa menos memoria y es mucho menos trabajoso. Eliges tu.
 
Te cuento:
 
- El casco y el Jetpac es una imagen, pero se utiliza en todas las animaciones
 
- Luego aparte está el astronauta andando, volando y haciendo lo que se necesite hacer

- Los sprites los montas en diseño (con Photoshop, Illustrator si es vectorial, etc.) o con un programa de animación (Synfic, Spriter, Toon Boon, spine) o algún asset que te permite hacerlo desde Unity (el propio Spine tiene un asset que lo integra en el editor de Unity).
 
- Esto dependerá de la animación que quieras hacer, si quieres mover unos ojos y una boca sobre una cara vacia para tener expresiones varias, seguramente este sistema no te merezca la pena porque es mas trabajoso y no te aporte mas que el otro, si quieres mover pliegues de ropa, el resultado va a ser mucho mas espectacular con el sistema que yo de digo, En cualquier caso y sobre todo en este que yo te pongo, vas a tener que tener ciertas nociones de animación, porque si no, te va a quedar mas mal que bien, para eso, al final te recomiendo dos libros que cualquiera que pretenda hacer una animación se tiene que leer obligatoriamente.
 
Una vez que tienes los sprites montados, los incorporas a Unity y ahi ya trabajas con ellos como siempre, te pongo el ejemplo del Jetpac, de los distintos fotogramas, que son solo del curpo, y de la animación final en un .gif y aparte un fotograma del astronauta volando, que como puedes observar es el mismo casco y el mismo Jetpac pero con otro cuerpo. 
 
En tu caso imagina que quieres que el personaje ande normal y si encuentra un arma que ande con la pistola levantada y cuando se acerque un enemigo ande con la pistola apuntando, tendrías por una parte los pies andando y posiblemente la animación del cuerpo, aparte los brazos sin pistola, cogiendo la pistola recogida y aparte también los brazos con la pistola apuntando y luego generarías tres ciclos de andar: normal, con pistola recogida y con pistola apuntando y según el estado, cambias la animación en el juego.
 
Espero haberte aclarado algo
 





Que veo que se me había olvidado comentar lo de los dos libros, que hay muchos mas:
 
The illusion of life
 
Cartooning animation
 
De este último hay un montón de versiones, a algunas le falta una parte y a otras otra, con distintos titulos en inglés y en castellano (no es importante, la traducción sale cara y tienen poco texto), el mas completo que he visto es este que tiene formato apaisado. Mejor vete a una librería grande o especializada o a una Casa del Libro y búscalo allí que tendrán varios ejemplares distintos y ves cual es mejor, es un libro barato y muy bueno, el de Disney es caro, cuesta alrededor de 50 €, pero contiene el ABC de la animación y es absolutamente indispensable si quieres animar

Vaya si que es un trabajo, me manejo en Photoshop, al menos, me vendrá bien leer sobre animaciones, gracias por las recomendaciones FNP!
 
Me enfocaré en el método de recortar cada parte del personaje. Tenía mis dudas sobre como se habían hecho los juegos más antiguos y con esto me queda claro, seguramente me saldrán algunas dudas cuando esté intentando ensamblar todo en Unity. Ya volveré hehe. Gracias!
 
 
 
 

Buenas!! Llego un poco tarde  pero quería aportar una ayuda.
 
 
 
Como bien comentan @FNP hay que trabajar con los sprites de las distintas partes del cuerpo, te pongo un ejemplo de un juego que seguro que conoces.
 

 
Aquí los sprites de las piernas están dibujados independientes a los del torso, por lo que solo se mostraran las animaciones correspondientes a la acción que realices mientras juegas.
 
 
 
¿Y esto como se lleva a Unity? Te pongo un ejemplo de como lo hago yo y creo que es lo más sencillo.
 

 
Creas tu objeto Player, con sus componentes necesarios,  script - "PlayerController", Rigibody, BoxCollider, etc. y eliminas el SpriteRenderer y el Animator. Creas dos objetos hijos (TopPart, BotPart) con los componentes SpriteRenderer y el Animator. Con esto se consigue tener 2 componentes Animator, uno para cada parte del cuerpo, por lo que las animaciones van a ser independientes una de la otra (puedes correr o saltar y hacer la misma animación de disparo). Y ya solo sería unirlo a través de código.
 

public Animator topAnimator;
public Animator botAnimator;
public SpriteRenderer TopSpritePart;
public SpriteRenderer BotSpritePart;
void MovePlayer()
    {
        float move = Input.GetAxisRaw("Horizontal") * moveSpeed * Time.fixedDeltaTime;
        Vector3 targetVelocity = new Vector2(move, rb.velocity.y);
        rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVelocity, ref x_Velocity, xy_smooth);
        topAnimator.SetFloat("speed", Mathf.Abs(move));
        botAnimator.SetFloat("speed", Mathf.Abs(move));
        if (move > 0 && !facingRight || move < 0 && facingRight)
            FlipPlayer();
    }
void Fire()
    {
        if (Input.GetKeyDown(KeyCode.X))
        {
            Shoot();
            topAnimator.SetTrigger("fire");
        }
    }
                                               

 
Como ves a la hora de realizar la acción de disparo, solo necesito acceder al Animator que controla el torso.
 
Espero haya quedado claro. Un saludo!! 
 
 
 
 

Etiquetas: