Menu
CoddyTech

Spielzustände

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 14 von 56.

Ein Spiel befindet sich immer in genau einem Zustand: Es wartet auf den Spieler, läuft oder ist beendet. Zwei boolesche Werte wie isPlaying und isOver können versehentlich beide den Wert true annehmen, und eine Zeichenfolge wie "Playng" wird kompiliert, stimmt aber nie überein. C# hat einen Typ für eine feste Auswahl von Möglichkeiten: das enum. Diese Fußgängerampel verwendet eines:

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 immer einen davon; du vergleichst es mit == und änderst es mit =. Ein falsch geschriebenes Signal.Gren verursacht einen Kompilierungsfehler, sodass der Fehler auffällt, bevor du auf Play drückst.

Das enum ist außerhalb der Klasse deklariert, sodass jedes Skript Signal verwenden kann und das Skript eines Fußgängers crossing.CanWalk() abfragen kann. Ein neues enum-Feld beginnt mit dem ersten Wert, hier Red. Im Inspector wird ein öffentliches enum-Feld als Dropdown-Liste seiner Werte angezeigt. Intern wird jeder Wert als Zahl gezählt, beginnend bei 0: (int)Signal.Green ist 2.

challenge icon

Aufgabe

Einfach

Überquere den Boden, ohne die Lava zu berühren. Das GameManager-Singleton und das Skript Lava sind bereits vorhanden; gib dem Spiel seine Zustände.

  • Deklariere in GameManager.cs oberhalb der Klasse ein Enum GameState mit den Werten Ready, Playing und GameOver in dieser Reihenfolge und füge GameManager ein öffentliches Feld vom Typ GameState mit dem Namen state hinzu. Das Spiel startet im Zustand Ready.
  • Während sich das Spiel im Zustand Ready befindet, wird es mit der Leertaste gestartet: Der Zustand wird zu Playing und Go! wird protokolliert.
  • Lava ruft HitLava() auf. Während sich das Spiel im Zustand Playing befindet, wird es dadurch beendet: Der Zustand wird zu GameOver und Game over wird protokolliert. Mit der Leertaste kann ein beendetes Spiel nicht neu gestartet werden.
  • In Player.cs bewegt die Pfeiltasten den Spieler nur, während der Zustand Playing ist.

Drücke auf Play, probiere die Pfeiltasten vor der Leertaste aus, laufe dann in die Lava und klicke anschließend auf Check.

Probier es selbst

using UnityEngine;

// Deklariere hier das GameState-enum: 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 ist das Spiel vorbei: Gib Game over im Log aus
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Echte Spiele entwickeln