Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Lass jedes Ziel das nächste Level öffnen.

  1. Zeige in Start() "Level " + level + " of " + levels in levelText an: level ist der buildIndex der aktiven Szene, levels ist SceneManager.sceneCountInBuildSettings - 1.
  2. Lade in OnTriggerEnter für den Player buildIndex + 1 oder 0 (das Menü), wenn dieser Wert nicht kleiner als sceneCountInBuildSettings ist.

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

Übe selbstständig: Unity-Playground