Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Assegna tre stati all’attraversamento della lava.

  1. Dichiara public enum GameState { Ready, Playing, GameOver } sopra la classe GameManager e public GameState state; al suo interno.
  2. In Update(), mentre lo stato è Ready, Space imposta lo stato su Playing e registra Go!. In HitLava(), mentre lo stato è Playing, imposta lo stato su GameOver e registra Game over.
  3. In Player.cs, leggi le frecce solo quando GameManager.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

Esercitati da solo: Playground Unity