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.
Sfida
MedioAvvia 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
lanedi uno, nella direzione corrispondente. Tenere premuto il tasto la cambia comunque di uno. lanenon scende mai sotto -1 né supera 1.- Il runner scivola lungo x fino a
lane * laneWidthalla velocità dilaneSpeedunità 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
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input