Menu
CoddyTech

Das Level neu starten

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

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 Neustart-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 an der Stelle, an der die Szene es platziert hat, einschließlich einer Kiste, die der Spieler umgestoßen hat. Jedes Feld hat wieder seinen Inspector-Wert, und 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 verwendet wird.

Ein static-Feld ist kein 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 dem Neuladen verweist es auf den zerstörten GameManager, bis Awake der neuen Instanz den Wert setzt.

challenge icon

Aufgabe

Einfach

Ein Sturz sollte das Level, in dem sich der Spieler befindet, neu starten und den Sturz zählen.

  1. Füge using UnityEngine.SceneManagement; hinzu und ändere den Zähler zu private static int falls;, damit er beim Neuladen erhalten bleibt.
  2. Führe in Update(), wenn player.position.y < fallY gilt, falls++; aus und lade SceneManager.GetActiveScene().name.

Drücke „Spielen“ und gehe in beiden Levels über eine Kante: Falls: 1, dann Falls: 2. Drücke anschließend „Prüfen“.

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
    }
}

Alle Lektionen in Echte Spiele entwickeln

Übe selbstständig: Unity-Playground