Menu
CoddyTech

Tre corsie

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

In questo capitolo realizzerai un Endless Runner. Un corridore sfreccia lungo una strada a tre corsie e cambia corsia per schivare gli ostacoli che gli vengono incontro. Nelle prossime lezioni la strada diventerà più veloce, la distanza verrà mostrata sullo schermo, un incidente terminerà la corsa con un pulsante per ripartire e verrà salvata la corsa migliore. Il corridore non si muove mai in avanti: rimane 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; per ora, gli ultimi tre sono vuoti.

Un corridore che si muove tra corsie non viene guidato come un'auto: si trova sempre in una di poche posizioni. Mantieni la posizione come numero intero, cambia il numero quando premi un tasto e ricava da esso la posizione. La piattaforma di questo 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 viene tenuto premuto. Mathf.Clamp mantiene il numero entro i limiti dell'edificio, così premere su all'ultimo piano non fa nulla e la pressione successiva del tasto giù porta direttamente al piano 3. Mathf.MoveTowards fa scorrere la piattaforma verso il suo piano alla velocità di moveSpeed unità al secondo e la ferma esattamente su di esso, invece di farla saltare lì in un solo frame. La posizione viene copiata, modificata e riassegnata, perché transform.position.y non può essere impostato da solo.

challenge icon

Sfida

Medio

Avvia l'Endless Runner con il runner. Nell'Inspector, assegna a Runner un laneWidth pari a 2.5 e un laneSpeed pari a 15; lane è -1 per la corsia sinistra, 0 per quella centrale e 1 per quella destra. In Update() di Runner:

  • Ogni pressione della freccia sinistra o destra cambia lane di uno, nella direzione corrispondente. Tenere premuto il tasto la cambia comunque di uno.
  • lane non scende mai sotto -1 né supera 1.
  • Il runner scivola lungo x fino a lane * laneWidth alla velocità di laneSpeed unità al secondo, mantenendo invariati y e z.

Per ora lascia invariati gli altri tre script. Premi Play, fai clic sul gioco e cambia corsia, poi premi Check.

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 scorri verso la x della corsia
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Creare veri giochi