Menu
CoddyTech

Następny poziom

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 19 z 60.

Każda scena na liście scen kompilacji ma numer, czyli indeks kompilacji: 0 dla pierwszej, 1 dla następnej i tak dalej. LoadScene przyjmuje ten numer oraz nazwę, a SceneManager.sceneCountInBuildSettings podaje, ile scen zawiera lista. Gdy poziomy znajdują się na liście w odpowiedniej kolejności, następny poziom ma indeks aktywnej sceny plus 1. To wyjście wczytuje go, a po ostatnim poziomie zatrzymuje działanie:

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!");
    }
}

Przy czterech scenach indeksy wynoszą od 0 do 3, a sceneCountInBuildSettings ma wartość 4, więc na ostatnim poziomie next wynosi 4, czyli o jeden więcej niż ostatni indeks. Dlatego warunek sprawdza next < sceneCountInBuildSettings: LoadScene(4) nie wczytałoby żadnej sceny i wyświetliłoby błąd Unity Cannot load scene: Invalid scene name (empty string) and invalid build index 4.

Jeden skrypt wyjścia obsługuje teraz każdy poziom, a żaden z nich nie podaje nazwy sceny. Aby dodać poziom, dodajesz jego scenę do listy; aby zmienić kolejność, przeciągasz sceny na liście.

challenge icon

Wyzwanie

Łatwy

Spraw, aby każdy cel otwierał następny poziom.

  1. W Start() wyświetl "Level " + level + " of " + levels w levelText: level to buildIndex aktywnej sceny, a levels to SceneManager.sceneCountInBuildSettings - 1.
  2. W OnTriggerEnter w przypadku gracza załaduj buildIndex + 1 lub 0 (menu), gdy ta wartość nie jest mniejsza niż sceneCountInBuildSettings.

Naciśnij „Graj” i ukończ wszystkie trzy poziomy: wrócisz do menu. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;

public class Goal : MonoBehaviour
{
    public TMP_Text levelText;

    void Start()
    {
        // wyświetl "Level 2 of 3": numer tego poziomu i łączną liczbę poziomów
    }

    void OnTriggerEnter(Collider other)
    {
        // gracz dotarł do celu: wczytaj następny poziom albo menu, jeśli to był ostatni poziom
    }
}

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier

Poćwicz samodzielnie: Edytor online Unity