Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Gib der Lavakreuzung drei Zustände.

  1. Deklariere public enum GameState { Ready, Playing, GameOver } oberhalb der GameManager-Klasse und public GameState state; in ihr.
  2. Setze in Update() bei Ready mit Space den Zustand auf Playing und gib Go! aus. Setze in HitLava() bei Playing den Zustand auf GameOver und gib Game over aus.
  3. Lies in Player.cs die Pfeiltasten nur aus, wenn GameManager.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

Übe selbstständig: Unity-Playground