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.
Aufgabe
EinfachZwei 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 zufallsund starte das Level neu, in dem sich der Player befindet: Ein Fall in Level2 startet Level2 neu. fallszählt jeden Sturz im Spiel, daher muss der Wert den Neustart überstehen. Start zeigt ihn bereits alsFalls: 1an.
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
}
}
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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der Bank