Home | Clases | Unity: Animación en 2D | Animación Walk (Andar)

Animación Walk (Andar)


Crear animación

Una vez que ya tenemos el movimiento y la cámara, nos faltaría añadir las distintas animaciones.

La primera y mas evidente es la de andar (walk), que crearemos de forma similar a como hicimos la de idle:

  • Arrastra ahora todos lo sprites de Assets > Sprites > Jugador llamados Walk (1) a Walk (10) al objeto Jugador.
  • Una nueva ventana indicará que se va a crear una nueva animación, la llamamos Walk y la guardamos dentro de Assets > Animations > Jugador.
  • El Animator ya no se crea, pues ya estaba creado antes y se utiliza el mismo.


Si seleccionas la animación Walk y a la derecha arrastras al objeto Jugador, puedes hacer un preview de la misma. Además en la ventana Window > Animation > Animation puedes cambiar la velocidad (Samples):




Flujo de las animaciones

Si ahora abres la ventana Window > Animation > Animator, puedes ver el flujo de las animaciones del Jugador: Idle, que es la animnación por defecto, y Walk, que estará "aislada".



Vamos a necesitar transiciones para los diferentes estados, de modo que algunas serán de un solo sentido mientras que otras serán de dos sentidos.

El el caso de andar (Walk), añade dos transiciones, una en cada sentido, entre los estados parado (Idle) y andar (Walk) de la ventana Animator para que el resultado sea similar al siguiente (las transiciones se realizan con clic derecho en el estado > Make Transition).



A continuación, añade a la izquierda de la lista de Parameters un nuevo bool llamado isWalking, que nos servirá de condición para cambiar de animación desde el script:



Selecciona ahora la transición que va de Idle a Walk y, en la Inspector window, desactiva Has Exit Time (porque vamos a usar una condición) y añade en Conditions la condición isWalking con el valor true.



Repite el proceso anterior con la transición que va de Walk a Idle y la condición isWalking con el valor false.




Script

Ya solo faltaría modificar el script del Jugador para que tenga acceso al Animator y nos permite poner el booleano a true cuando se esté moviendo o a false cuando no lo haga:


using System.Collections;
using UnityEngine;

public class Jugador : MonoBehaviour {

[Range(1, 10)]
public float velocidad;
[Range(1, 500)]
public float potenciaSalto;
Rigidbody2D rb2d;
SpriteRenderer spRd;
bool isJumping = false;
Animator animator;

void Start () {

//Capturo los componentes Rigidbody2D, Sprite Renderer y Animator del Jugador
rb2d = GetComponent<Rigidbody2D>();
spRd = GetComponent<SpriteRenderer>();
animator = GetComponent<Animator>();

}

void FixedUpdate () {

//Movimiento horizontal
float movimientoH = Input.GetAxisRaw("Horizontal");
rb2d.velocity = new Vector2(movimientoH * velocidad, rb2d.velocity.y);

//Sentido horizontal
if (movimientoH > 0)
{
spRd.flipX = false;
}
else if (movimientoH < 0)
{
spRd.flipX = true;
}

//Animación de andar
if (movimientoH != 0)
{
animator.SetBool("isWalking", true);
}
else
{
animator.SetBool("isWalking", false);
}

//Si pulso la tecla de salto (espacio) y no estaba saltando
if (Input.GetButtonDown("Jump") && !isJumping)
{
//Le aplico la fuerza de salto
rb2d.AddForce(Vector2.up * potenciaSalto);
//Digo que está saltando
isJumping = true;
}

}

private void OnCollisionEnter2D(Collision2D other)
{

//Si el jugador colisiona con un objeto con la etiqueta suelo
if (other.gameObject.CompareTag("Suelo"))
{
//Digo que no está saltando
isJumping = false;
//Le quito la fuerza de salto remanente que tuviera
rb2d.velocity = new Vector2(rb2d.velocity.x, 0);

}

}

}

Fecha de publicación: 14/04/2020
Asignaturas: realización de proyectos multimedia interactivosdesarrollo de entornos interactivos multidispositivo
Temas: unity 2d animación
Utilizamos cookies propias y de terceros para mejorar su experiencia en la navegación. Al seguir navegando entendemos que acepta su uso.
Si lo desea, consulte nuestras políticas de privacidad y cookies
ENTENDIDO
[X] Cerrar

Contacta conmigo


[X] Cerrar

Acceso alumnos