Stati di gioco
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 14 di 56.
Un gioco si trova in un solo stato alla volta: in attesa del giocatore, in esecuzione o terminato. Due valori bool come isPlaying e isOver possono finire entrambi su true per errore, e una stringa come "Playng" viene compilata e non corrisponde mai. C# ha un tipo per un elenco fisso di scelte, l'enum. Questo semaforo ne usa uno:
public enum Signal { Red, Yellow, Green }
public class Crossing : MonoBehaviour
{
public Signal signal;
void Update()
{
if (signal == Signal.Red && Input.GetMouseButtonDown(0))
{
signal = Signal.Green;
Debug.Log("Walk!");
}
}
public bool CanWalk()
{
return signal == Signal.Green;
}
}enum Signal { Red, Yellow, Green } crea un nuovo tipo con esattamente tre valori, scritti Signal.Red, Signal.Yellow e Signal.Green. Un campo Signal contiene uno di questi valori alla volta; lo confronti con == e lo modifichi con =. Un errore di battitura come Signal.Gren genera un errore di compilazione, quindi l'errore viene mostrato prima di premere Play.
L'enum è dichiarato fuori dalla classe, quindi ogni script può usare Signal, e lo script di un pedone può chiedere crossing.CanWalk(). Un nuovo campo enum inizia con il primo valore, qui Red. Nell'Inspector un campo enum pubblico viene visualizzato come un elenco a discesa dei suoi valori. Sotto, ogni valore è un numero che parte da 0: (int)Signal.Green vale 2.
Sfida
FacileAttraversa il pavimento senza toccare la lava. GameManager (un singleton) e lo script Lava sono già presenti; assegna degli stati al gioco.
- In
GameManager.cs, sopra la classe, dichiara un enumGameStatecon i valoriReady,PlayingeGameOver, in quest’ordine, e aggiungi a GameManager un campo pubblicoGameStatechiamatostate. Il gioco inizia nello stato Ready. - Quando il gioco è nello stato Ready, Space lo avvia: lo stato diventa Playing e viene registrato
Go!. - Lava chiama
HitLava(). Quando il gioco è nello stato Playing, questo lo termina: lo stato diventa GameOver e viene registratoGame over. Space non riavvia mai una partita terminata. - In
Player.cs, le frecce muovono il giocatore solo mentre lo stato è Playing.
Premi Gioca, prova le frecce prima di premere Space, poi entra nella lava e infine premi Verifica.
Provalo tu
using UnityEngine;
// Dichiara qui l'enum GameState: Ready, Playing, GameOver
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
// un campo pubblico GameState chiamato state
void Awake()
{
Instance = this;
}
void Update()
{
// Quando lo stato è Ready, Space avvia il gioco e scrive Go! nel log
}
public void HitLava()
{
// Quando lo stato è Playing, il gioco finisce: scrivi Game over nel log
}
}
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