Menu
CoddyTech

Das Ende der Nacht

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

Die letzte Herausforderung vervollständigt ein ganzes Spiel: einen Manager mit Zuständen, eine Pause, die die Zeit anhält, zwei Enden und einen Neustart, der die Zeitskalierung zurücksetzt.

challenge icon

Aufgabe

Schwer

Füge eine Pause, zwei Endzustände und einen Neustart hinzu.

  1. pauseButton wechselt nur zwischen Playing und Paused: Bei Paused wird Time.timeScale auf 0 gesetzt und pausePanel angezeigt; bei Playing werden beide Änderungen rückgängig gemacht.
  2. Bei 0 Sekunden ist die Nacht Won. Bei Won oder Lost: Zeitskalierung 0, endPanel wird angezeigt und You survived the night! oder The bats got you erscheint in endText.
  3. restartButton setzt die Zeitskalierung auf 1 und lädt die Szene neu.

Drücke „Spielen“, pausiere, verliere und spiele erneut. Drücke dann „Prüfen“.

Probier es selbst

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public class GameManager : MonoBehaviour
{
    public enum State { Playing, Paused, Won, Lost }

    public static GameManager Instance;

    public float nightLength = 15f;
    public float spawnEvery = 2f;
    public GameObject batPrefab;
    public Transform[] spawnPoints;
    public TMP_Text dawnText;
    public Button pauseButton;
    public GameObject pausePanel;
    public GameObject endPanel;
    public TMP_Text endText;
    public Button restartButton;

    public State state;

    private float timeLeft;
    private float spawnTimer;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        state = State.Playing;
        timeLeft = nightLength;
        ShowDawn();
    }

    void Update()
    {
        if (state != State.Playing) return;

        timeLeft -= Time.deltaTime;
        spawnTimer += Time.deltaTime;
        if (spawnTimer >= spawnEvery)
        {
            spawnTimer -= spawnEvery;
            Transform point = spawnPoints[Random.Range(0, spawnPoints.Length)];
            Instantiate(batPrefab, point.position, Quaternion.identity);
        }
        ShowDawn();
    }

    public void Lose()
    {
        if (state != State.Playing) return;
        state = State.Lost;
    }

    void ShowDawn()
    {
        dawnText.text = "Dawn in " + Mathf.CeilToInt(timeLeft);
    }
}
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