Menu
CoddyTech

Charger une scène

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

Un jeu Unity est divisé en scènes : un menu, chaque niveau, le générique. Chaque scène est un fichier qui lui est propre, avec ses propres objets, et un script passe à une autre scène avec SceneManager.LoadScene, depuis l’espace de noms UnityEngine.SceneManagement. Le bouton « Jouer » de ce menu, relié dans l’Inspector, ouvre le niveau Forest :

using UnityEngine;
using UnityEngine.SceneManagement;

public class MainMenu : MonoBehaviour
{
    public void Play()
    {
        SceneManager.LoadScene("Forest");
    }
}

Unity ne peut charger que les scènes qui figurent dans la liste des scènes de la build : dans Unity 6, il s’agit de File > Build Profiles, sous Liste des scènes (dans les versions plus anciennes, la fenêtre s’appelle Build Settings). Le nom doit être exactement celui du fichier de scène. Si une scène ne figure pas dans la liste, ou s’il y a une faute de frappe comme "Forrest", rien ne se charge et la Console affiche une erreur qui commence par Scene 'Forrest' couldn't be loaded et indique que la scène n’a pas été ajoutée à la build ; le jeu reste alors dans le menu.

Le changement n’est pas instantané. Le reste de la frame en cours s’exécute d’abord, donc les lignes qui suivent LoadScene s’exécutent toujours ; au début de la frame suivante, Unity détruit tous les objets de l’ancienne scène et construit la nouvelle, dont les scripts redémarrent avec Awake et Start.

challenge icon

Défi

Facile

Fais en sorte que chaque portail charge la scène désignée par son sceneName.

  1. En haut de Portal.cs, ajoute using UnityEngine.SceneManagement;.
  2. Écris void OnTriggerEnter(Collider other) : lorsque other.CompareTag("Player"), appelle SceneManager.LoadScene(sceneName);.

Appuie sur « Jouer » et traverse chaque portail : Desert, le Hub et Glacier se chargent à tour de rôle. Puis clique sur « Vérifier ».

Essayez vous-même

using UnityEngine;

public class Portal : MonoBehaviour
{
    public string sceneName;

    // quand le joueur entre, charge la scène nommée sceneName
}

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

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