Menu
CoddyTech

Stany gry

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

Gra znajduje się w jednym stanie naraz: czeka na gracza, trwa albo się zakończyła. Dwie wartości typu bool, takie jak isPlaying i isOver, mogą przez pomyłkę jednocześnie przyjąć wartość true, a ciąg znaków, taki jak "Playng", kompiluje się i nigdy nie pasuje. C# ma typ przeznaczony dla ustalonej listy opcji — enum. Ta sygnalizacja świetlna go wykorzystuje:

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 naraz jedną z nich; porównujesz je za pomocą ==, a zmieniasz za pomocą =. Błędnie zapisane Signal.Gren powoduje błąd kompilacji, więc pomyłka zostanie wykryta, zanim naciśniesz Play.

Enum 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ść, tutaj Red. W Inspectorze publiczne pole typu enum jest wyświetlane jako lista rozwijana z jego wartościami. Pod spodem każda wartość jest liczbą liczoną od 0: (int)Signal.Green to 2.

challenge icon

Wyzwanie

Łatwy

Przejdź przez podłogę, nie dotykając lawy. Skrypty GameManager (singleton) i Lava są już dostępne; dodaj do gry stany.

  • W pliku GameManager.cs, nad klasą, zadeklaruj wyliczenie GameState z wartościami Ready, Playing i GameOver, w tej kolejności, a w klasie GameManager dodaj publiczne pole typu GameState o nazwie state. Gra rozpoczyna się w stanie Ready.
  • Gdy gra jest w stanie Ready, naciśnięcie spacji rozpoczyna rozgrywkę: stan zmienia się na Playing i zostaje wyświetlony komunikat Go!.
  • Lawa wywołuje HitLava(). Gdy gra jest w stanie Playing, kończy to grę: stan zmienia się na GameOver i zostaje wyświetlony komunikat Game over. Spacja nigdy nie uruchamia ponownie zakończonej gry.
  • W pliku Player.cs strzałki poruszają graczem tylko wtedy, gdy stan gry to Playing.

Naciśnij Play, wypróbuj strzałki przed naciśnięciem spacji, a następnie wejdź na lawę i naciśnij Check.

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 naciśnięcie Space rozpoczyna grę i wypisuje Go!
    }

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

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier