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.
Sfida
MedioFai muovere il corridore tra tre corsie con le frecce.
- In
Runner, dentroUpdate(), eseguilane--quando viene premutoInput.GetKeyDown(KeyCode.LeftArrow)elane++quando viene premuta la freccia destra. - Fallo restare sulla strada:
lane = Mathf.Clamp(lane, -1, 1);. - Copia
transform.positioninp, spostap.xversolane * laneWidthconMathf.MoveTowardsalla velocitàlaneSpeed * Time.deltaTimee riassegnap.
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
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro2Pulsanti 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: Runner infinito
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di inputEsercitati da solo: Playground Unity