Nächstes Level
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 19 von 60.
Jede Szene in der Szenenliste des Builds hat eine Nummer, ihren Build-Index: 0 für die erste, 1 für die nächste und so weiter. LoadScene übernimmt diese Nummer ebenso wie einen Namen, und SceneManager.sceneCountInBuildSettings gibt an, wie viele Szenen die Liste enthält. Da die Level in der Liste der Reihenfolge nach angeordnet sind, ist das nächste Level der Index der aktiven Szene plus 1. Dieser Ausgang lädt es; nach dem letzten Level wird der Vorgang beendet:
void OnTriggerEnter(Collider other)
{
if (!other.CompareTag("Player")) return;
int next = SceneManager.GetActiveScene().buildIndex + 1;
if (next < SceneManager.sceneCountInBuildSettings)
{
SceneManager.LoadScene(next);
}
else
{
Debug.Log("You finished the game!");
}
}Bei vier Szenen reichen die Indizes von 0 bis 3 und sceneCountInBuildSettings ist 4. Im letzten Level ist next also 4, also eins hinter dem Ende. Deshalb lautet die Prüfung next < sceneCountInBuildSettings: LoadScene(4) würde nichts laden und Unitys Fehler Cannot load scene: Invalid scene name (empty string) and invalid build index 4 protokollieren.
Ein einziges Ausgangsskript dient jetzt für jedes Level, und keines davon benennt eine Szene. Um ein Level hinzuzufügen, fügst du seine Szene der Liste hinzu; um die Reihenfolge zu ändern, ziehst du die Szenen in der Liste an die gewünschte Stelle.
Aufgabe
EinfachLass jedes Ziel das nächste Level öffnen.
- Zeige in
Start()"Level " + level + " of " + levelsinlevelTextan:levelist derbuildIndexder aktiven Szene,levelsistSceneManager.sceneCountInBuildSettings - 1. - Lade in
OnTriggerEnterfür den PlayerbuildIndex + 1oder0(das Menü), wenn dieser Wert nicht kleiner alssceneCountInBuildSettingsist.
Drücke „Spielen“ und schließe alle drei Level ab: Das Menü erscheint wieder. Klicke dann auf „Prüfen“.
Probier es selbst
using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;
public class Goal : MonoBehaviour
{
public TMP_Text levelText;
void Start()
{
// zeige "Level 2 of 3": die Nummer dieses Levels und die Gesamtzahl der Level
}
void OnTriggerEnter(Collider other)
{
// der Spieler hat das Ziel erreicht: lade das nächste Level oder nach dem letzten Level das Menü
}
}
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