Menu
CoddyTech

Livello successivo

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 19 di 60.

Ogni scena nell'elenco delle scene della build ha un numero, il suo indice della build: 0 per la prima, 1 per la successiva e così via. LoadScene accetta quel numero oltre a un nome, e SceneManager.sceneCountInBuildSettings indica quante scene contiene l'elenco. Con i livelli disposti in ordine nell'elenco, il livello successivo corrisponde all'indice della scena attiva più 1. Questa uscita lo carica e, dopo l'ultimo livello, si ferma:

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

Con quattro scene, gli indici vanno da 0 a 3 e sceneCountInBuildSettings è 4, quindi nell'ultimo livello next è 4, uno oltre la fine. Ecco perché il controllo è next < sceneCountInBuildSettings: LoadScene(4) non caricherebbe nulla e registrerebbe l'errore di Unity Cannot load scene: Invalid scene name (empty string) and invalid build index 4.

Ora un solo script di uscita serve per tutti i livelli e non ne nomina nessuno. Per aggiungere un livello, aggiungi la relativa scena all'elenco; per cambiare l'ordine, trascina le scene nell'elenco.

challenge icon

Sfida

Facile

Fai in modo che ogni obiettivo apra il livello successivo.

  1. In Start(), mostra "Level " + level + " of " + levels in levelText: level è il buildIndex della scena attiva, levels è SceneManager.sceneCountInBuildSettings - 1.
  2. In OnTriggerEnter, per il giocatore, carica buildIndex + 1 oppure 0 (il menu) quando non è inferiore a sceneCountInBuildSettings.

Premi «Gioca» e completa tutti e tre i livelli: tornerai al menu. Poi premi «Verifica».

Provalo tu

using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;

public class Goal : MonoBehaviour
{
    public TMP_Text levelText;

    void Start()
    {
        // mostra "Level 2 of 3": il numero di questo livello e il numero totale di livelli
    }

    void OnTriggerEnter(Collider other)
    {
        // il giocatore ha raggiunto l'obiettivo: carica il livello successivo oppure il menu dopo l'ultimo livello
    }
}

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity