Menu
CoddyTech

Tre corsie

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 27 di 60.

Questo capitolo realizza un Endless Runner. Un corridore sfreccia lungo una strada a tre corsie e cambia corsia per schivare gli ostacoli che gli vengono incontro. Nelle lezioni successive la strada diventa più veloce, la distanza viene mostrata sullo schermo, un incidente termina la corsa e un pulsante permette di ripartire, e viene salvata la corsa migliore. Il corridore non si muove mai in avanti: resta a z = 0 e gli ostacoli gli vengono incontro, così la strada non finisce mai. Il gioco ha quattro script, Runner, Spawner, Obstacle e GameManager, e per ora gli ultimi tre sono vuoti.

Un corridore sulle corsie non si guida come un'auto: si trova sempre in una di poche posizioni. Mantieni la posizione come numero intero, cambia il numero quando viene premuto un tasto e calcola la posizione a partire da esso. Questa piattaforma del lavavetri serve i cinque piani di un edificio, distanti 3 unità:

[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 fa sì che una pressione corrisponda a un piano, mentre GetKey aggiungerebbe un piano a ogni frame in cui il tasto è tenuto premuto. Mathf.Clamp mantiene il numero entro i limiti dell'edificio, così premere su quando si è all'ultimo piano non fa nulla e la pressione successiva verso il basso porta direttamente al piano 3. Mathf.MoveTowards fa scorrere la piattaforma verso il suo piano a una velocità di moveSpeed unità al secondo e la ferma esattamente lì, invece di farla saltare in un solo frame. La posizione viene copiata, modificata e riassegnata, perché transform.position.y non può essere impostata da sola.

challenge icon

Sfida

Medio

Fai muovere il corridore tra tre corsie con le frecce.

  1. In Runner, dentro Update(), esegui lane-- quando viene premuto Input.GetKeyDown(KeyCode.LeftArrow) e lane++ quando viene premuta la freccia destra.
  2. Fallo restare sulla strada: lane = Mathf.Clamp(lane, -1, 1);.
  3. Copia transform.position in p, sposta p.x verso lane * laneWidth con Mathf.MoveTowards alla velocità laneSpeed * Time.deltaTime e riassegna p.

Premi «Gioca», fai clic sul gioco e cambia corsia: il corridore scivola da una corsia all'altra. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;
    public float laneSpeed = 15f;
    private int lane = 0;   // -1 è la corsia di sinistra, 0 quella centrale, 1 quella di destra

    void Update()
    {
        // Cambia corsia con le frecce, poi spostati gradualmente verso la x della corsia
    }
}

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity