Menu
CoddyTech

Tres carriles

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

Este capítulo crea un juego de carreras sin fin. Un 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 carrera y habrá un botón para volver a correr, y se guardará la mejor carrera. El corredor nunca avanza: permanece en z = 0 y los obstáculos se desplazan hacia él, así 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. La plataforma de este 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, mientras que GetKey subiría una planta en cada fotograma que 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, con la siguiente pulsación hacia abajo, se pasa directamente a la planta 3. Mathf.MoveTowards desliza la plataforma hacia su planta a moveSpeed unidades por segundo y se detiene exactamente en ella, en lugar de saltar hasta allí en un fotograma. La posición se copia, se modifica y se asigna de nuevo, porque transform.position.y no se puede establecer por sí sola.

challenge icon

Desafío

Intermedio

Inicia el Endless Runner con el corredor. El Inspector asigna a Runner un laneWidth de 2.5 y un laneSpeed de 15, y lane es -1 para el carril izquierdo, 0 para el central y 1 para el derecho. En Runner's Update():

  • Cada pulsación de la flecha izquierda o derecha cambia lane en una unidad en esa dirección. Mantener pulsada la tecla sigue cambiándolo en una unidad.
  • lane nunca baja de -1 ni supera 1.
  • El corredor se desliza por x hasta lane * laneWidth a laneSpeed unidades por segundo, y conserva sus valores de y y z.

Deja los otros tres scripts como están por ahora. Pulsa Play, haz clic en el juego y cambia de carril; después, pulsa Check.

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 y 1 el derecho

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

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Creación de juegos reales