Spielzustände
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 14 von 60.
Ein Spiel befindet sich immer in genau einem Zustand: Es wartet auf den Spieler, läuft oder ist vorbei. Zwei boolesche Werte wie isPlaying und isOver können versehentlich beide auf true gesetzt werden, und eine Zeichenfolge wie "Playng" lässt sich kompilieren und stimmt mit keinem Wert überein. C# hat einen Typ für eine feste Liste von Auswahlmöglichkeiten: enum. Diese Fußgängerampel verwendet einen solchen Typ:
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 } erstellt einen neuen Typ mit genau drei Werten: Signal.Red, Signal.Yellow und Signal.Green. Ein Feld vom Typ Signal enthält jeweils einen davon; du vergleichst es mit == und änderst es mit =. Ein falsch geschriebenes Signal.Gren führt zu einem Kompilierfehler, sodass der Fehler auffällt, bevor du auf „Spielen“ drückst.
Das enum wird außerhalb der Klasse deklariert, damit jedes Skript Signal verwenden kann und das Skript eines Fußgängers crossing.CanWalk() abfragen kann. Ein neues Enum-Feld erhält als Anfangswert den ersten Wert, hier Red. Im Inspector wird ein öffentliches Enum-Feld als Dropdown-Liste mit seinen Werten angezeigt. Intern wird jeder Wert als Zahl ab 0 gezählt: (int)Signal.Green ist 2.
Aufgabe
EinfachGib der Lavakreuzung drei Zustände.
- Deklariere
public enum GameState { Ready, Playing, GameOver }oberhalb der GameManager-Klasse undpublic GameState state;in ihr. - Setze in
Update()bei Ready mit Space den Zustand auf Playing und gibGo!aus. Setze inHitLava()bei Playing den Zustand auf GameOver und gibGame overaus. - Lies in
Player.csdie Pfeiltasten nur aus, wennGameManager.Instance.state == GameState.Playing.
Drücke „Spielen“: Die Pfeiltasten warten auf Space. Drücke danach „Prüfen“.
Probier es selbst
using UnityEngine;
// Deklariere hier das Enum GameState: Ready, Playing, GameOver
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
// ein öffentliches GameState-Feld namens state
void Awake()
{
Instance = this;
}
void Update()
{
// Im Zustand Ready startet Space das Spiel und gibt Go! im Log aus
}
public void HitLava()
{
// Im Zustand Playing endet das Spiel: Gib Game over im Log aus
}
}
Alle Lektionen in Echte Spiele entwickeln
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der BankÜbe selbstständig: Unity-Playground