Eine Szene laden
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 17 von 56.
Ein Unity-Spiel ist in Szenen aufgeteilt: ein Menü, jedes Level, der Abspann. Jede Szene ist eine eigene Datei mit eigenen Objekten, und ein Skript wechselt mit SceneManager.LoadScene aus dem Namespace UnityEngine.SceneManagement zu einer anderen Szene. Die Play-Schaltfläche dieses Menüs, die im Inspector verbunden wurde, öffnet das Forest-Level:
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public void Play()
{
SceneManager.LoadScene("Forest");
}
}Unity kann nur Szenen laden, die in der Szenenliste des Builds enthalten sind: In Unity 6 findest du diese unter File > Build Profiles im Bereich Scene List (in älteren Versionen heißt das Fenster Build Settings). Der Name muss exakt dem Namen der Szenendatei entsprechen. Fehlt eine Szene in der Liste oder enthält der Name einen Tippfehler wie "Forrest", wird nichts geladen und die Console zeigt eine Fehlermeldung an, die mit Scene 'Forrest' couldn't be loaded beginnt und besagt, dass die Szene nicht zum Build hinzugefügt wurde; das Spiel bleibt im Menü.
Der Wechsel erfolgt nicht sofort. Der Rest des aktuellen Frames wird zuerst ausgeführt, daher werden Zeilen nach LoadScene weiterhin ausgeführt; zu Beginn des nächsten Frames zerstört Unity alle Objekte der alten Szene und erstellt die neue, deren Skripte wieder mit Awake und Start beginnen.
Aufgabe
EinfachEin Hub mit zwei Portalen. Dieser Build hat drei Szenen: Hub (die erste), Desert und Glacier. Im Hub führt ein Portal zur Wüste und eines zum Gletscher, und jede dieser Szenen hat ein Portal zurück zum Hub. Jedes Portal hat das Skript Portal, und im Inspector wird sceneName auf das Ziel gesetzt. Mit den Pfeiltasten bewegst du den Player (bereit).
Schreibe Portal.cs: Wenn der Player (mit dem Tag Player) in ein Portal läuft, lade die Szene, deren Name in sceneName dieses Portals steht.
Drücke Play, besuche beide Orte und klicke dann auf Check.
Probier es selbst
using UnityEngine;
public class Portal : MonoBehaviour
{
public string sceneName;
// Wenn der Spieler hineingeht, lade die Szene mit dem Namen sceneName
}
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