Noticias

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

Animación consecutiva en Mecanim

Iniciado por Ester_pixels, Marzo 16, 2016, 10:22:32 AM

Tema anterior - Siguiente tema
Hola a todos/asSoy Nueva en este foro e intento averiguar una cosilla (simple) en MecanimIntento reproducir dos animaciones consecutivas al pulsar el botón izquierdo o derecho del teclado con mecanim, me explico:tengo dos animaciones en 2d (sprites) uno es de rotar a la izquierda y el otro es de caminar a la izquierda, pues lo que pretendo es que cuando pulse el botón izquierdo del teclado reproduzca primero la animación de rotar a la izquierda y cuando termine esa animación pase a caminar izquierda (os recuerdo que son animaciones sprites).la animación de rotar a la izquierda no tiene looppero la animación de caminar a la izquierda si que tiene loop.Con un character 3D (sin utilizar mecanim) utilizo este código que funciona genial
if (Input.GetAxis("Horizontal")){

animation.CrossFade("rotar");

yield !animation.IsPlaying("rotar");

animation.CrossFadeQueued("caminar");

}
En este código lo que digo es que cuando pulso Horizontal reproduce animación de rotary cuando termine la animación de rotar pasa a caminar.El problema es que estoy utilizando animaciones sprites 2D y con mecanim, no puedo utilizar este tipo de script porque es para el 3D sin Animator¿Sabríais como podría reproducir dos animaciones consecutivas pulsando un botón como explico en el código?Os agradecería mucho vuestra respuestaGRACIAS 

Marzo 16, 2016, 05:26:59 PM #1 Ultima modificación: Enero 01, 1970, 01:00:00 AM por RtypeX
Hola Ester,Por casualidad he entrado en el foro para preguntar una cosa y he visto tu pregunta.Estos días estoy prototipando un juego 2d en pixel art y tuve que pelearme un rato para cambiar las animaciones. Soy más bien novato en estas cosas (soy gamedesigner y 2d/3d artist) pero igual te puedo orientar.En mi caso lo que hice fue hacer las animaciones por separado desde el panel Animation.Luego desde el panel Animator creé las transiciones de una animación a otra.Desde la pestaña Parameters creé una variable Bool (Walk en mi caso)Después clicas en las flechas de las transiciones y creas una Condition (En mi caso, que para pasar de Idle a Walk, la variable Walk tenía que ser true y viceversa)Con ésto solo tienes que ir al script y vincularlo con la variable bool que has creado en el Animator.En mi caso: playerClone.GetComponent(Animator).SetBool("Walk", isWalking); donde isWalking es una variable boolean que he declarado en el script y con la que le digo que cuando me mueva el pj sea true y sino false.Tu caso supongo que será parecido. Le metes una variable tipo bool en el Animator y la llamas desde el script para que cambie de animación cuando la primera acabe primera animación.Espero que te sirva... o te oriente xD   

Marzo 16, 2016, 05:54:53 PM #2 Ultima modificación: Marzo 16, 2016, 06:04:43 PM por Ester_pixels
Hola RtypeX!!! GRACIAS por contestar!Lo del tema de las transiciones ya lo tengo, pero tal como me has explicado sólo tengo un inconveniente y es que tengo la animación de rotar entre idle y caminar, me explico:Si mi player está mirando a la derecha (y pulso el botón izquierdo de dirección)  tengo una animación de rotar a la derecha y cuando termine la animación de rotar pasa a caminar, es decir, pasa de animación rotar a caminar al pulsar botón izquierdo, y si no pulso el boton izq pasa a idle ...no se si me explico...)¿¿¿¿¿¿¿anim.SetBool("rotar",false);????????anim.SetBool("caminar",true) } else if  ( ! Input.GetAxis("Horizontal")){  anim.SetBool("caminar",false) y entonces pasaría a idleNo se si me explico pero esta tontería me está volviendo loca!!!GRACIAS  RtypeX!!! 

Marzo 16, 2016, 06:12:29 PM #3 Ultima modificación: Marzo 16, 2016, 06:12:51 PM por juanma_teso
Entonces lo que necesitas son dos variables, una que sea bool 'andar' y otra que sea trigger 'rotar', de esta manera cuando des el primer click en cualquiera de las dos flechas disparas el trigger y rota, y cuando mantengas presionado pones el bool a true, cambiando cuando sueltes, hay diferentes funciones para captar los inputs del teclado, en tu caso no te recomiendo usar getaxis porque debe tener diferentes comportamientos si pulsas al principio o mantienes pulsado y cuando dejes de pulsar, te recomiendo usar GetKeyDown y GetKey. Por último añadir que tienes que mirar bien en animator, señalando las animaciones de rotar como 'has exit time' o algo así para que, aunque estén pulsando la flecha, termine de reproducir la animación de rotar.

Marzo 16, 2016, 06:23:00 PM #4 Ultima modificación: Marzo 16, 2016, 06:23:41 PM por Ester_pixels
Pues lo de la variable trigger para rotar no se me había ocurrido ... probaré a ver que tal esoLo del getAxis está claro, lo he puesto como ejemplo..sorry culpa miay lo de ¿has exit time?  salir del tiempo...parece interesante, pero eso que es? jajaja  eso como se aplica?

No recuerdo si ese era el nombre, es una casilla para obligar a terminar una animación antes de cambiar a otra, p.e. terminar la animación de recargar antes de reproducir la de disparar, terminar la animación de rotar antes de reproducir la de andar...

Marzo 16, 2016, 07:00:23 PM #6 Ultima modificación: Marzo 16, 2016, 09:52:16 PM por Ester_pixels
Vale he buscado lo de "has exit time" y eso es para unity 5, pero yo tengo el 4 así que es la casilla que se  llama atomicBueno..pues gracias por contestar juanma!!Sigo un poquillo confusa con esto, pero iré probando hasta que de con ello, no tengo mas remedio...con lo bien que estaba con el animation..ahora me tengo que esforzar para aprender el animator de mecanim y es un poco locura para el 2D  jejeGRACIASaunque si a alguien se le ocurre algo mas por aquí ando SALUDOS-----------------------------------------------------------------------------------------------------------¡¡¡¡¡BIEEEENN!!!! HA FUNCIONADO!!!  YUUUHHUUUUU!!!he puesto una variable trigger a rotar y he puesto la casilla de  exit time;rota y después camina!!! que bien !!GRACIAS JUANMA!!! MUUAAKK!!! jajja

Etiquetas: