Menu
CoddyTech

Das Level neu starten

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

Am schnellsten setzt du ein Level zurück, indem du es erneut lädst. SceneManager.GetActiveScene() gibt die Szene zurück, die gerade geöffnet ist, und ihr name (oder ihr buildIndex) ist der Wert, den LoadScene erwartet. Diese Restart-Schaltfläche auf einem Game-Over-Panel ruft Folgendes auf:

public void Restart()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}

Unity zerstört die geöffnete Szene und erstellt sie erneut aus der Szenendatei. Jedes Objekt befindet sich wieder dort, wo die Szene es platziert hat, auch eine Kiste, die der Spieler umgestoßen hat, und jedes Feld hat wieder seinen Inspector-Wert. Awake und Start werden erneut ausgeführt. Kein Code muss die Dinge einzeln wieder an ihren Platz setzen. Da die Schaltfläche die aktive Szene statt eines Namens wie "Level3" abfragt, startet dasselbe Skript jedes Level neu, in dem es platziert ist.

Ein static-Feld ist nicht Teil der Szene: Es gehört zur Klasse, daher bleibt es beim Neuladen unverändert. Ein private static float bestTime; behält die Bestzeit über Neustarts hinweg bei, während ein normales private float time; mit der neuen Szene wieder bei 0 beginnt. GameManager.Instance ist ebenfalls static: Nach einem Neuladen verweist es auf den zerstörten GameManager, bis Awake des neuen GameManagers es festlegt.

challenge icon

Aufgabe

Einfach

Zwei Level, Level1 und Level2, jeweils mit einem Level-Objekt, das das Skript LevelRestart enthält. Mit den Pfeiltasten bewegst du den Player, und der goldene Block in Level1 lädt Level2 (beide sind bereit). Vervollständige LevelRestart.cs:

  • Wenn der Player unter fallY (-3) fällt, addiere 1 zu falls und starte das Level neu, in dem sich der Player befindet: Ein Fall in Level2 startet Level2 neu.
  • falls zählt jeden Sturz im Spiel, daher muss der Wert den Neustart überstehen. Start zeigt ihn bereits als Falls: 1 an.

Drücke Play, gehe in beiden Leveln über eine Kante und klicke dann auf Check.

Probier es selbst

using UnityEngine;
using TMPro;

public class LevelRestart : MonoBehaviour
{
    public Transform player;
    public TMP_Text fallsText;
    public float fallY = -3f;
    private int falls;

    void Start()
    {
        fallsText.text = "Falls: " + falls;
    }

    void Update()
    {
        // unterhalb von fallY: den Sturz zählen und das Level neu starten, in dem sich der Spieler befindet
    }
}
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