Menu
CoddyTech

Niveau suivant

Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 19 sur 60.

Chaque scène de la liste des scènes du build possède un numéro, son index de build : 0 pour la première, 1 pour la suivante, et ainsi de suite. LoadScene prend ce numéro ainsi qu’un nom, et SceneManager.sceneCountInBuildSettings indique combien de scènes contient la liste. Comme les niveaux sont dans l’ordre dans la liste, l’index du niveau suivant est celui de la scène active plus 1. Cette sortie charge le niveau suivant, puis s’arrête après le dernier niveau :

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

Avec quatre scènes, les index vont de 0 à 3 et sceneCountInBuildSettings vaut 4. Ainsi, au dernier niveau, next vaut 4, soit une unité après la fin. C’est pourquoi le test est next < sceneCountInBuildSettings : LoadScene(4) ne chargerait rien et consignerait l’erreur Unity Cannot load scene: Invalid scene name (empty string) and invalid build index 4.

Un seul script de sortie sert maintenant pour tous les niveaux, et aucun d’eux ne nomme de scène. Pour ajouter un niveau, tu ajoutes sa scène à la liste ; pour changer l’ordre, tu fais glisser les scènes dans la liste.

challenge icon

Défi

Facile

Fais en sorte que chaque objectif ouvre le niveau suivant.

  1. Dans Start(), affiche "Level " + level + " of " + levels dans levelText : level correspond au buildIndex de la scène active, et levels correspond à SceneManager.sceneCountInBuildSettings - 1.
  2. Dans OnTriggerEnter, pour le Player, charge buildIndex + 1, ou 0 (le menu) lorsque cette valeur n'est pas inférieure à sceneCountInBuildSettings.

Appuie sur « Jouer » et termine les trois niveaux : le menu réapparaît. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;

public class Goal : MonoBehaviour
{
    public TMP_Text levelText;

    void Start()
    {
        // afficher "Level 2 of 3" : le numéro de ce niveau et le nombre total de niveaux
    }

    void OnTriggerEnter(Collider other)
    {
        // le joueur a atteint l’objectif : charger le niveau suivant, ou le menu après le dernier niveau
    }
}

Toutes les leçons de Créer de vrais jeux

Entraînez-vous par vous-même : Playground Unity