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.
Wyzwanie
ŁatwyNadaj przeprawie przez lawę trzy stany.
- Zadeklaruj
public enum GameState { Ready, Playing, GameOver }nad klasą GameManager, a w niejpublic GameState state;. - W
Update(), gdy stan to Ready, naciśnięcie spacji ustawia Playing i zapisuje w loguGo!. WHitLava(), gdy stan to Playing, ustaw GameOver i zapisz w loguGame over. - W
Player.csodczytuj klawisze strzałek tylko wtedy, gdyGameManager.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
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w banku3Menedżer gry
Jeden skrypt obsługuje gręSingletonStany gryInstrukcja switch dla stanuPowtórka: menedżer rund6Projekt: Niekończący się bieg
Trzy toryPrzeszkody przed tobąPoćwicz samodzielnie: Edytor online Unity