Menu
CoddyTech

Stany gry

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 14 z 60.

Gra znajduje się w danym momencie w jednym stanie: czeka na gracza, trwa albo się zakończyła. Dwie zmienne bool, takie jak isPlaying i isOver, mogą przez pomyłkę przyjąć wartość true jednocześnie, a ciąg znaków taki jak "Playng" kompiluje się i nigdy nie pasuje. C# ma typ przechowujący stałą listę opcji — enum. To światło na przejściu dla pieszych korzysta z takiego typu:

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 } tworzy nowy typ z dokładnie trzema wartościami, zapisywanymi jako Signal.Red, Signal.Yellow i Signal.Green. Pole typu Signal przechowuje jedną z nich naraz; porównujesz je za pomocą ==, a zmieniasz za pomocą =. Literówka w Signal.Gren powoduje błąd kompilacji, więc pomyłka zostaje wykryta, zanim naciśniesz „Graj”.

Typ wyliczeniowy jest zadeklarowany poza klasą, więc każdy skrypt może używać Signal, a skrypt pieszego może wywołać crossing.CanWalk(). Nowe pole typu enum przyjmuje początkowo pierwszą wartość — w tym przypadku Red. W Inspectorze publiczne pole typu enum jest wyświetlane jako lista rozwijana zawierająca jego wartości. Wewnętrznie każdej wartości odpowiada liczba, liczona od 0: (int)Signal.Green to 2.

challenge icon

Wyzwanie

Łatwy

Nadaj przeprawie przez lawę trzy stany.

  1. Zadeklaruj public enum GameState { Ready, Playing, GameOver } nad klasą GameManager, a w niej public GameState state;.
  2. W Update(), gdy stan to Ready, naciśnięcie spacji ustawia Playing i zapisuje w logu Go!. W HitLava(), gdy stan to Playing, ustaw GameOver i zapisz w logu Game over.
  3. W Player.cs odczytuj klawisze strzałek tylko wtedy, gdy GameManager.Instance.state == GameState.Playing.

Naciśnij „Graj”: klawisze strzałek czekają na spację. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

// Zadeklaruj tutaj enum GameState: Ready, Playing, GameOver

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    // publiczne pole typu GameState o nazwie state

    void Awake()
    {
        Instance = this;
    }

    void Update()
    {
        // W stanie Ready klawisz Space rozpoczyna grę i wypisuje Go!
    }

    public void HitLava()
    {
        // W stanie Playing gra się kończy: wypisz Game over
    }
}

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier

Poćwicz samodzielnie: Edytor online Unity