Home | Clases | Unity: Animación en 2D | Movimiento

Movimiento


Movimiento horizontal

Para poder mover al Jugador en horizontal con las teclas (más adelante haremos que salte), vamos a necesitar un script que capture el movimiento de las teclas y aplique dicho movimiento, multiplicado por una cierta velocidad, al Rigidbody 2D de nuestro Jugador.

Además, cuando el Jugador se mueva hacia la izquierda, debemos invertir el sprite de modo que mire hacia ese lado, razón por la cual debemos capturar su componente Sprite Renderer y cambiar la propiedad Flip en el eje X en función de si se está moviendo hacia la izquierda (movimiento negativo) o hacia la derecha (movimiento positivo).

Genera un nuevo script llamado Jugador dentro de Assets > Scripts con el siguiente código y asóciaselo al objeto Jugador:


using System.Collections;
using UnityEngine;

public class Jugador : MonoBehaviour {

[Range(1, 10)]
public float velocidad;
Rigidbody2D rb2d;
SpriteRenderer spRd;

void Start () {

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

}

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

}
}


Si ahora le ajustas una Velocidad entre 1 y 2 al Jugador en su Inspector window y ejecutas el juego, se debería mover y girar a izquierda y derecha.


Salto

Para que el Jugador pueda saltar, bastaría con aplicar una fuerza vertical a su Rigidbody 2D cuando se pulse una tecla, pero en ese caso podría seguir pulsando la tecla de salto y hacer que el Jugador volara.

Como esa no es la intención, debemos asegurarnos además de que además de pulsar la tecla, el Jugador está en el suelo.

Lo primero que debemos hacer es seleccionar el tilemap Suelo y crear y a añadirle una nueva etiqueta o tag llamada Suelo.



A continuación, modifica el script del Jugador de forma que incluya un booleano que cambie de true a false en función de si está en el suelo o no, utilizando para ello el método OnCollisionEnter2D. Estudia bien los comentarios del código siguiente para comprenderlo bien:


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;

void Start () {

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

}

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

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

}

}

}



Si ahora aplicas al Jugador una Potencia de Salto de unos 300 en su Inspector window y ejecutas el juego, verás que el Jugador salta, pero solo cuando está en el suelo. Para evitar que el sprite rote sobre si mismo al chocar con alguna esquina, bloquea la rotación marcando la propiedad Constraints > Freeze Rotation Z del componente Rigidbody2D del Jugador:


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