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);
}


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

7 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

    ResponderBorrar
    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

      Borrar
  2. 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?

    ResponderBorrar
  3. 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 .

    ResponderBorrar
  4. 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

    ResponderBorrar
  5. 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
    "

    ResponderBorrar
    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

      Borrar