Niveau suivant
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 19 sur 56.
Chaque scène de la liste des scènes de la compilation possède un numéro, son index de compilation : 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 de la liste, le niveau suivant correspond à l’index de la scène active plus 1. Cette sortie le charge, 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 valeur au-delà de la fin. C’est pourquoi le test est next < sceneCountInBuildSettings : LoadScene(4) ne chargerait rien et consignerait l’erreur de Unity Cannot load scene: Invalid scene name (empty string) and invalid build index 4.
Un seul script de sortie sert désormais pour tous les niveaux, et aucun ne nomme de scène. Pour ajouter un niveau, tu ajoutes sa scène à la liste ; pour modifier l’ordre, tu fais glisser les scènes dans la liste.
Défi
FacileLa liste de build contient quatre scènes : Menu (index 0), puis Level1, Level2 et Level3. Le bouton Play du Menu ouvre Level1, et les flèches permettent de déplacer le Player (les deux sont prêts). Chaque niveau possède un objectif doré avec le script Goal. Écris-le sans nommer de scène :
- Dans Start, affiche le numéro de ce niveau et le nombre de niveaux dans
levelText, sous la formeLevel 2 of 3. Le Menu n’est pas un niveau. - Lorsque le Player (avec le tag
Player) atteint l’objectif, charge le niveau suivant de la liste. Après le dernier niveau, retourne au Menu.
Appuie sur Play, joue les trois niveaux, puis appuie sur Check.
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
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
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 niveau7Contrôle du temps
Mettre en pause avec timeScaleRalentiTemps non mis à l’échelleRécapitulatif : Bullet Time10Projet : jeu de plateforme en 3D
Le parcoursPlateformes mobiles2Boutons 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 banque