martes, 17 de junio de 2014

#script Activar animaciones en modo Mecanim #unity3d

Luego de haber revisado mi otra publicación con respecto a "Animación con #Sprite en #Unity o animación con secuencias de imágenes 2D" procederé a indicarte como activar las animaciones realizadas con sprite por medio de un script.



En la publicación anterior llegamos hasta animar cada movimiento.
Luego de haberlos realizado debemos de relacionar cada movimiento con el otro, y para poder realizar eso debemos de seleccionar el movimiento que da paso al otro, o en otras palabras seleccionar la animación previa a la siguiente. En mi caso voy a proceder a relacionar todas las animaciones con animacion_espera o conocido como idle.


Para poder relacionarlas como se indica en la imagen debemos de dar clic derecho sobre la animación_espera y seleccionar la opción "make transition" y arrastrar la fecha con la animación que deseamos relacionar.

Y así proceder a relacionar cada una de las animaciones con las otras, es necesario indicar que la dirección de la flecha indica que animación se ejecuta luego.

Es importante indicar que animación es la principal. Reconocer la animación principal es fácil puesto se pone de color naranja. Si la animación de color naranja no deseamos que sea la principal podemos dar clic derecho en otra animación y seleccionar "set as default" para que sea la principal.
Luego de realizar ese proceso, necesitamos crear variables para validar en qué momento se debe de realizar que animación. Animator acepta variables de los siguientes tipos : Float, int, bool, trigger. En el caso de este ejemplo hemos seleccionado Bool o booleano que sirve para la variable verdadero o falso.


Como se observa en la imagen superior he procedido a crear tres variables camina, golpe, y salto de tipo bool que se encuentran desactivadas, para que cuando se activen se active la siguiente animación.
En cada una de las líneas de transición entre cada animación debemos de asignarle que variable debe de afectar a que animación, para así por ejemplo solo se ejecute la animación_salto cuando la variable salto sea verdadera.
Pero antes se debe de confirmar que en la animación principal o por defecto se encuentre activa la opción Solo en todas las animaciones relacionadas, con esto estamos limitando que solo se ejecute la animación cuando se valide la variable.

Cuando seleccionemos cada línea de transición podemos observar que animación se ejecuta previo y después. Y así mismo en la parte inferior encontramos la sección de "conditions o condiciones" en la cual al desplegar el box podemos encontrar nuestras variables creadas. En cada línea que une a las animaciones activaremos las variables respectivas y en el valor indicaremos "true o verdadero". Por ejemplo si queremos activar la animación del golpe del personaje iremos a la línea que une a idle con animacion_golpe y asignaremos la variable golpe con el valor true.


Y ahora toca crear el script que de valor de positivo a cada variable para que se ejecute la animación, por ejemplo que cuando aplastemos la barra espaciadora nuestro personaje salte. El script a continuación se encuentra en C#. Claro este script debe de poseerlo nuestro player.
El script se encuetra comentado para mejor comprensión.

C# "Activa Animacion"
----------------------------------------------------------------------------------------
using UnityEngine;
using System.Collections;

public class activa_animacion : MonoBehaviour {

Animator ani; //esta variable guardará el animator

void  Start (){

ani = GetComponent<Animator> (); //aquí asignamos el animator a la variable
}


void  Update (){

if (Input.GetButtonDown ("Jump")) {
// si se presiona la barra de espacio se activa la variable salto y se le dá valor positivo
ani.SetBool ("salto", true); // con esta línea se activa la animación
}

if (Input.GetButtonDown ("Horizontal")) {
ani.SetBool ("camina", true);
}


}
}
----------------------------------------------------------------------------------------

22 comentarios:

  1. Como puedo hacer para que una animacion pase de un estado a otro cada x segundos? Por ejemplo:

    Pasar de idle a lanzar bola cada 5 segundos.

    A ver si alguien me puede ayudar q estoy atascado en esto. Si puede ser en c# mejor.

    Un saludo

    ResponderEliminar
    Respuestas
    1. http://singletechgames.com/2014/03/06/tutorial-unity-2d-4-3-juego-plataforma-android-ii/

      usa un parametro de tipo float, para poner los segundo que pasaran antes de iniciar

      Eliminar
  2. como hago para que la animacion se reprodusca infinitamente porque yo coloco

    if (Input .GetKey (Keycode .w))
    miAnimator .setbool ("Avanzar",true);

    para que camine pero solo se reproduce una vez y se queda quieto hasta
    que suelte la tecla alguien podria ayudarme

    ResponderEliminar
    Respuestas
    1. Bueno si deseas que la animación se reproduzca de forma infinita (loop) deberás de quitar la condición osea, la tecla w. podrías poner de la siguiente forma.

      void Update (){
      miAnimator.setbool ("Avanzar", true);
      }

      Saludos, me comentas si necesitas algo adicional!

      Eliminar
    2. Lo que quise decir es que yo tengo mi personaje con la animacion idle y la animacion de correr , entonces lo que yo hago es que pongo a que se reproduzca la animacion de correr al pulsar la tecla W .

      lo que quiero que haga es que el personaje siga corriendo mientras yo pulse la tecla W, Pero lo que pasa es que la animacion solo reproduce una vez y luego se queda estático en el aire igual que la animacion de idle , yo opino que el problema no esta en el scripting si no en la animacion .

      las dos animaciones las saque de Mixamo.com y el personaje lo hice en Makehuman .

      Eliminar
    3. he resuelto el problema de que la animacion se reprodujera una vez
      fue un error mio pero ahora se genera otro error

      el cual consiste en que el personaje esta limitado a correr en un bucle el tipo da los tres pasos y luego se hecha para atras y luego vuelve a correr y se vuelve a hechar para atras ...

      como lo soluciono

      Eliminar
    4. Lograste resolver ese problema? Yo estoy con el mismo error... El personaje da los pasos y luego retrocede a la misma posición...

      Eliminar
  3. hola yo voy empezando es esto del unity3d y quiero hacerles una consulta tengo el problema de que al darle clic derecho no me aparece la opcion de make transition ni select as default es por la version de unity o que pasa?

    ResponderEliminar
  4. Hola Creo Que Tiene Un Error Ya Que En Vez De ani Es animator Por Lo Menos En Mi Unity 5.2.3f1

    ResponderEliminar
    Respuestas
    1. ani es el nombre de la variable de tipo Animator

      Eliminar
    2. A Ok Gracias Ey Alonso Bueno Eh Podrias Decirme que tal mi proyecto de Unity En Mi Canal Sam Mr Gamer Bueno Asi Nos Unimos Y Yo Te Doy Scripts Tal Vez Que Dices

      Eliminar
  5. Bro que pasa si la animacion por defecto(La amarilla si no estoy equivocado) no se reproduce automaticamente

    ResponderEliminar
  6. una pregunta como hago para activar una animacion dependiendo del lugar y la tecla EJEMPLO "escalar un muro de una forma parcour cuando yo presione barra espacioadora, sin que realize el salto normal
    "

    ResponderEliminar
    Respuestas
    1. debes de incluir validaciones, o colisiones para saber cuando esta en la pared y que ahí y solo ahí la barra no sea salto sino otra animación. Pero es por medio de validaciones

      Eliminar
  7. Hola, estoy desarrollando un minijuego basado en wratch your boss, en el cual cuando el jugador interactua con determinados objetos de la pantalla se activa "x" animacion o "y" animacion. querria saber como programar esto en unity. Un saludo

    ResponderEliminar
    Respuestas
    1. Antes que nada me tocó revisar el juego para poder guiarte más o menos por donde ir, para lo cual yo considero que debes de primero realizar las zonas sensibles usando la opcion de onclick del mouse en pantalla de esa manera das clic en las zonas que deseas que sirvan de boton. Luego de eso debes de indicar que al dar clic en cada una de esas opciones se active la animación que deseas, ahora realizar animaciones en Unity de esa forma fluida es un poco compleja deberías de realizar en otro programa como cinema, maya(3d) u otro que maneje en 2d, o en otro caso hacer animaciones que exportes en video.
      No veo complejo el codigo de los botones, puesto que se basaría que cuando de clic se active animación.

      Eliminar
  8. Hola, he hecho lo que esta en este posto, pero no me funciona, para activar la animacion mediante una tecla, por favor ayuda!!!

    Quisiera que al presionar una tecla se reproduciera la animacion de hablar o correr, se podra? ayuda por favor ....

    ResponderEliminar
    Respuestas
    1. Todavía, necesitas ayuda o ya lo has podido solucionar??

      Eliminar
  9. Quiero practicar con un modelo cuadrupedo, el cual ya tiene sus animaciones correspondientes pero no logro hacerlo funcionar en unity osea quiero controlarlo pero no se como seria el sctips. alguien me puede ayudar o dar una orientación?

    ResponderEliminar
  10. hola buenas días gracias por este script esta bien me gustaría saber si podrías ayudarme con un script que me permita poder activar dos animaciones al presionar un botón es decir abrir y cerrar una puerta pero para android pues e buscado pero no e encontrado nada en las redes y pues quisiera saber si me puedes ayudar con esto pues e estado buscando y hasta el momento solo tengo un script que me aparezca el botón de la mano al colisionar con la puerta osea estilo granny pero el botón no activa nada pues no e podido hacer que abra y cierre la puerta le agradezco me puedan ayudar y me informen gracias pues estoy trabajando en juego que deseo poner en play store mi correo es gasuarez1@misena.edu.co

    ResponderEliminar
  11. Buenos dias alguien puede ayudarme estoy atorado soy principiante en unity, mi duda es como puedo reproducir una animacion al darle clic al objeto

    ResponderEliminar
  12. Tengo un problema, he animado un personaje, y este no aparece en el modo jugar, solo en el modo de pruebas. AYUDA¡¡¡¡¡¡¡¡¡¡

    ResponderEliminar