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.
Défi
FacileFais en sorte que chaque objectif ouvre le niveau suivant.
- Dans
Start(), affiche"Level " + level + " of " + levelsdanslevelText:levelcorrespond aubuildIndexde la scène active, etlevelscorrespond àSceneManager.sceneCountInBuildSettings - 1. - Dans
OnTriggerEnter, pour le Player, chargebuildIndex + 1, ou0(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
1Texte à l’écran
Canvas et texteAfficher le scoreFormater les nombresUn compte à reboursRécapitulatif : compteur de vitesse4Scènes et niveaux
Charger une scèneRedémarrer le niveauNiveau suivantConserver entre les scènesRécapitulatif : sélection du niveau2Boutons et écrans
Boutons et onClickLambdasRelier les éléments dans l’InspectorActiver et désactiver les panneauxBarres de santéRécapitulatif : boutique d’améliorations5Sauvegarder avec PlayerPrefs
Enregistrer un nombreCharger avec une valeur par défautMeilleur scoreEnregistrer les paramètresRécapitulatif : les pièces à la banqueEntraînez-vous par vous-même : Playground Unity