Menu
CoddyTech

Tres carriles

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 27 de 60.

En este capítulo crearás un corredor infinito. El corredor avanza por una carretera de tres carriles y cambia de carril para esquivar los obstáculos que se acercan. En las próximas lecciones, la carretera acelerará, la distancia aparecerá en pantalla, un choque terminará la partida con un botón para volver a jugar y se guardará la mejor partida. El corredor nunca avanza: permanece en z = 0 y los obstáculos se desplazan hacia él, por lo que la carretera nunca se acaba. El juego tiene cuatro scripts, Runner, Spawner, Obstacle y GameManager, y los tres últimos están vacíos por ahora.

Un corredor que se desplaza por carriles no se dirige como un coche: siempre está en uno de unos pocos lugares. Guarda el lugar como un número entero, cambia el número al pulsar una tecla y calcula la posición a partir de él. Esta plataforma limpiacristales sirve a las cinco plantas de un edificio, separadas por 3 unidades:

[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;

void Update()
{
    if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
    if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
    floor = Mathf.Clamp(floor, 0, 4);

    Vector3 p = transform.position;
    p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
    transform.position = p;
}

GetKeyDown hace que una pulsación suba una planta; en cambio, GetKey sumaría una planta en cada fotograma mientras se mantuviera pulsada la tecla. Mathf.Clamp mantiene el número dentro de los límites del edificio, así que pulsar arriba en la última planta no hace nada, y la siguiente pulsación hacia abajo lleva directamente a la planta 3. Mathf.MoveTowards desliza la plataforma hacia su planta a moveSpeed unidades por segundo y se detiene justo en ella, en lugar de saltar hasta allí en un solo fotograma. La posición se copia, se modifica y se vuelve a asignar, porque no se puede establecer transform.position.y por sí solo.

challenge icon

Desafío

Intermedio

Haz que las flechas muevan al corredor entre tres carriles.

  1. En Update() de Runner, usa lane-- cuando se pulse Input.GetKeyDown(KeyCode.LeftArrow) y lane++ cuando se pulse la flecha derecha.
  2. Mantenlo en la carretera: lane = Mathf.Clamp(lane, -1, 1);.
  3. Copia transform.position en p, mueve p.x hacia lane * laneWidth con Mathf.MoveTowards a laneSpeed * Time.deltaTime y vuelve a asignar p.

Pulsa «Jugar», haz clic en el juego y cambia de carril: el corredor se deslizará. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;
    public float laneSpeed = 15f;
    private int lane = 0;   // -1 es el carril izquierdo, 0 el central, 1 el derecho

    void Update()
    {
        // Cambia de carril con las flechas y luego deslízate hacia la x del carril
    }
}

Todas las lecciones de Creación de juegos reales

Practica por tu cuenta: Playground de Unity