Livello successivo
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 19 di 56.
Ogni scena nell’elenco delle scene della build ha un numero, il suo indice di 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 ordinati nell’elenco, il livello successivo è l’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 test è 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 uno script di uscita serve per tutti i livelli e nessuno di essi specifica il nome di una scena. Per aggiungere un livello, aggiungi la sua scena all’elenco; per cambiare l’ordine, trascina le scene nell’elenco.
Sfida
FacileLa build elenca quattro scene: Menu (indice 0), poi Level1, Level2 e Level3. Il pulsante Play del Menu apre Level1 e le frecce permettono di muovere il Player (entrambi sono già pronti). Ogni livello ha un Goal dorato con lo script Goal. Scrivilo senza nominare alcuna scena:
- In Start, mostra in
levelTextil numero di questo livello e il numero di livelli, comeLevel 2 of 3. Il Menu non è un livello. - Quando il Player (con il tag
Player) raggiunge il goal, carica il livello successivo nell'elenco. Dopo l'ultimo livello, torna al Menu.
Premi Play, completa tutti e tre i livelli, poi premi Check.
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
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input