Menu
CoddyTech

Rückblick: Rundenmanager

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 16 von 60.

Dieses Kapitel hat dem Spiel einen Manager gegeben: ein Singleton, auf das andere ohne ein Feld zugreifen können, und Zustände, zwischen denen es wechselt. Der Rundenmanager setzt beides ein.

challenge icon

Aufgabe

Einfach

Schließe das Einsammeln der Münzen ab; SetState ist bereits geschrieben.

  1. Füge public static RoundManager Instance; hinzu und setze es in Awake().
  2. Wechsle in Update() anhand von state: Ready wartet auf die Leertaste; Playing zählt timeLeft herunter und wechselt dann zum nächsten Ready oder nach der letzten Runde zu Finished.
  3. public bool TakeCoin(): nur während Playing, zähle die Münze und zeige Coins: 2 an; gib true zurück. Coin.cs zerstört eine gezählte Münze, die der Player berührt.

Drücke in allen drei Runden auf „Spielen“. Klicke anschließend auf „Prüfen“.

Probier es selbst

using UnityEngine;
using TMPro;

public enum RoundState { Ready, Playing, Finished }

public class RoundManager : MonoBehaviour
{
    // das Singleton: eine statische Instance, in Awake() gesetzt
    public GameObject readyPanel;
    public GameObject playPanel;
    public GameObject finishedPanel;
    public TMP_Text roundText;
    public TMP_Text coinsText;
    public TMP_Text finalText;
    public int rounds = 3;
    public float roundTime = 4f;
    private RoundState state;
    private int round = 1;
    private int coins;
    private float timeLeft;

    void Start()
    {
        SetState(RoundState.Ready);
    }

    void Update()
    {
        // anhand von state verzweigen: Ready wartet auf Space; Playing zählt die Zeit herunter
    }

    void SetState(RoundState next)
    {
        state = next;
        readyPanel.SetActive(next == RoundState.Ready);
        playPanel.SetActive(next == RoundState.Playing);
        finishedPanel.SetActive(next == RoundState.Finished);
        if (next == RoundState.Ready) roundText.text = "Round " + round;
        if (next == RoundState.Playing) timeLeft = roundTime;
        if (next == RoundState.Finished) finalText.text = "Coins: " + coins;
    }

    // TakeCoin(): Eine Münze zählt nur während Playing
}
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

Übe selbstständig: Unity-Playground