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.
Wyzwanie
ŁatwyPrzejdź 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 wyliczenieGameStatez wartościamiReady,PlayingiGameOver, w tej kolejności, a w klasie GameManager dodaj publiczne pole typuGameStateo nazwiestate. 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 komunikatGame over. Spacja nigdy nie uruchamia ponownie zakończonej gry. - W pliku
Player.csstrzał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
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski 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ą