Stati di gioco
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 14 di 60.
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 per errore su true, e una stringa come "Playng" viene compilata ma non corrisponde mai. C# ha un tipo per un elenco fisso di scelte, l'enum. Questo semaforo usa un enum:
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 è un errore di compilazione, quindi l'errore viene mostrato prima di premere «Gioca».
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 dal primo valore, qui Red. Nell'Inspector un campo enum pubblico appare come un menu a discesa con i suoi valori. Internamente, ogni valore è un numero che parte da 0: (int)Signal.Green è 2.
Sfida
FacileAssegna tre stati all’attraversamento della lava.
- Dichiara
public enum GameState { Ready, Playing, GameOver }sopra la classe GameManager epublic GameState state;al suo interno. - In
Update(), mentre lo stato è Ready, Space imposta lo stato su Playing e registraGo!. InHitLava(), mentre lo stato è Playing, imposta lo stato su GameOver e registraGame over. - In
Player.cs, leggi le frecce solo quandoGameManager.Instance.state == GameState.Playing.
Premi «Gioca»: le frecce restano in attesa di Space. Poi 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 di tipo 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 termina: scrivi Game over nel log
}
}
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