Logo Makeyourgame
Accueil Les formations Créer un jeu Les ateliers Les tutoriels Blog
Logo Makeyourgame
Les formations Les financements Les exercices La certification Unity
Logo Makeyourgame
Mes objectifs Les jeux Les ressources Le glossaire
Logo Makeyourgame
Les tutos Les tutos Youtube

Utiliser SceneManagement de Unity pour gérer vos scènes : Unity

pictureProfil_alto
Ecrit par alto
Catégorie Unity
Mis à jour le 26/04/2020
Utiliser SceneManagement de Unity pour gérer vos scènes

Depuis quelques versions déjà , on doit utiliser le namespace SceneManagement de Unity pour changer de scène dans notre jeu vidéo.

5 min Débutant

Mais les possibilité de chargement de Scène sont multiples et grâce au loading en mode additive, on peut imiter le comportement par défaut de Godot Engine.

 

Une scène par définition est composée de GameObjects, qui sont eux composés de composants de type MonoBehavior. On peut voir la liste des GameObjects de la scène grâce à la fenêtre "hierarchy", et en cliquant sur un GameObject, on accède à sa liste de composants, visibles dans la fenêtre "inspector".

Tous ceux et celles qui ont déjà pratiqué Unity savent cela. Mais comment gérez vous vos scènes ?

 

Gestion standard de scènes: mode single

Pour une première architecture de jeu vidéo, on peut penser à utiliser une scène pour chaque situation du jeu. Par exemple on pourrait avoir :

                                                            
  • Scène du menu : UI, scripts de gestion de ce menu (comme par exemple la connexion Facebook) ...
  •                                                                                                                      
  • Scène du jeu : le player (rendering, logique...), toute la logique du jeu, UI du jeu ...
  •                                                          

Cette première architecture simplissime regroupe ainsi tous les éléments autour d'une même situation d'utilisation de l'application (InGame, InMenu) dans une même scène.

Ainsi nous passerons d'une situation à une autre en changeant de scène.

Avec l'API de Unity, on utilisera donc le chargement de scène en mode Single, avec la méthode LoadScene :

using UnityEngine.SceneManagement;

//reste du code

//changement de scène
SceneManager.LoadScene("nomDeLaProchaineSceneACharger");

Remarquez que la méthode ne prend ici, qu'un seul paramètre : le nom de la scène (paramètre de type string). Mais par défaut selon l'API, on charge en réalité en mode LoadSceneMode.Single.

Ainsi c'est comme si on faisait :

using UnityEngine.SceneManagement;

//reste du code

//changement de scène
SceneManager.LoadScene("nomDeLaProchaineSceneACharger",LoadSceneMode.Single);

 

Ce faisant, l'ancienne scène sera "déchargée" et la nouvelle chargée et sera rendu active et principale. Ce sera donc elle qui sera rendu par le jeu vidéo, et si votre scène dispose d'une caméra, nous pourrons alors voir cette scène sur notre écran.

 

Cette architecture a l'avantage d'être simple à mettre en place, mais elle souffre de quelques inconvénients:

                                                            
  • Si plusieurs personnes travaillent dans la même scène, on risque d'avoir des conflits lors du push/pull avec le système de versionning (Git par exemple).
  •                                                                                                                      
  • Pas de modularité, tout le jeu est dans une même scène
  •                                                                                                                      
  • Pas du tout adapté à un jeu de type OpenWorld
  •                                                          

 

Attention! Ce type de chargement en synchrone bloque l'exécution tant que la scène n'est pas complètement chargée. Si vous voulez attendre le chargement complet sans bloquer le reste, utilisez plutôt le mode asynchrone avec : LoadSceneAsync.

 

Gestion modulaire de scènes: mode additive

Si on se concentre que sur notre scène de jeu qui comporte actuellement tout à l'intérieur, on peut penser une première décomposition en sous-scènes. C'est un peu le fonctionnement de base de  Godot Engine.

Ainsi notre scène de jeu pourrait elle même charger d'autres sous-scènes.

Voici un exemple non exhaustif :

                                                            
  • Sous-scène UI : toute l'interface et sa logique
  •                                                                                                                      
  • Sous-scène Moteur de jeu : la logique principale du jeu
  •                                                                                                                      
  • Sous-scène Player : les datas, les input
  •                                                                                                                      
  • Sous-scène Secteur 1 : gestion logique du secteur 1
  •                                                                                                                      
  • Sous-scène Secteur 2 : ...
  •                                                                                                                      
  • ...
  •                                                          

Cependant pour charger une scène dans une autre scène, nous devons cette fois-ci changer de mode et passer en mode additive.

using UnityEngine.SceneManagement;

//reste du code

//changement de scène
SceneManager.LoadScene("nomDeLaProchaineSceneACharger",LoadSceneMode.Additive);

 

 

Comment implémenter le mode additive ?

Retrouvez dans la vidéo, un tutoriel exemple de mise en application directe du concept de chargement en mode additive.

 

Codez en C# votre premier jeu vidéo avec Unity 2108.

Vues: 6006

Licence:



Validation du Tutoriel

Veuillez vous connecter ou créer un compte pour pouvoir valider ce tutoriel et ainsi gagner de l'expérience (XP) !

Vous aimerez aussi...

Blog et Tutoriels