Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Attraversa 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 enum GameState con i valori Ready, Playing e GameOver, in quest’ordine, e aggiungi a GameManager un campo pubblico GameState chiamato state. 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 registrato Game 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
    }
}
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