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.
Aufgabe
EinfachEin Sturz sollte das Level, in dem sich der Spieler befindet, neu starten und den Sturz zählen.
- Füge
using UnityEngine.SceneManagement;hinzu und ändere den Zähler zuprivate static int falls;, damit er beim Neuladen erhalten bleibt. - Führe in
Update(), wennplayer.position.y < fallYgilt,falls++;aus und ladeSceneManager.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
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: Levelauswahl2Buttons 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Übe selbstständig: Unity-Playground