Un modèle de projet Unity en quatre scènes
Présentation d'un template Unity gratuit en quatre scènes pour accélérer le démarrage du jeu et fluidifier les chargements jusqu'au menu principal.
Quand vous développez un jeu vidéo, il arrive que vous créiez d’abord le prototype, puis que vous pensiez à en faire un vrai jeu complet.
Où dois-je optimiser, comment passer d’un niveau à l’autre, hé, ça freeze entre les niveaux, comment rendre tout ça fluide pour les joueurs ??!
Eh bien, quelques assets peuvent vous simplifier la vie. Le template de projet Four scenes en fait partie : il est gratuit et disponible à la fin de cet article. Voici pourquoi il est si utile.
Cet asset est un héritage du studio de jeux indé que j’ai créé en 2012. Ce ne sont pas exactement les mêmes sources que celles utilisées pendant ses 6 années d’activité, mais une évolution de celles-ci.
Pourquoi quatre scènes ?
Quand votre jeu Unity se lance, l’OS doit d’abord charger le moteur Unity. Pendant ce temps, seul le splash screen est affiché, c’est-à-dire votre logo et/ou le logo Unity, avec une petite animation si vous avez de la chance.
Ensuite, votre première scène est chargée, ainsi que toutes les ressources partagées. Une fois qu’elles sont chargées, tous les game objects de votre première scène sont activés, et toutes les méthodes Awake, Start et OnEnable sont appelées et exécutées.
Ce n’est qu’après tout cela que la première scène s’affiche pour le joueur. Ça peut être trèèèès long, croyez-moi ! Si vous développez un jeu iOS, cela peut même provoquer l’arrêt de votre app par iOS parce qu’elle met trop de temps à afficher quelque chose à l’utilisateur (je suis passé par là…).
La solution est donc de découper votre première scène en plusieurs morceaux, et pas seulement en deux. Voici les scènes que j’ai mises dans chaque projet que j’ai développé une fois que j’ai compris cela.
La première scène : chargement statique

La première scène doit être minimaliste : pensez à un autre splash screen et un seul script. C’est votre point d’entrée, pour indiquer au joueur et à l’OS que le moteur est chargé et que c’est maintenant le jeu qui prend le relais.
Cette scène est là pour emmener le joueur une étape plus loin : vous pouvez avoir un splash screen animé, détecter les performances du matériel pour rediriger vers les réglages de qualité SD ou HD, mais c’est tout.
Dans le template, il y a un canvas et une image de fond floue. Aujourd’hui, ce n’est plus aussi nécessaire qu’avant, mais c’est une astuce pour les appareils d’entrée de gamme : utiliser une image floue en plus basse résolution pour consommer moins de mémoire et améliorer les performances.
Il n’y a qu’un seul script personnalisé, et il sert à charger la scène suivante.
Je n’ajoute pas de shader personnalisé, de code sophistiqué ni de code spécifique ultra-optimisé quand ce n’est pas nécessaire.
Depuis mon premier projet de code il y a un bon moment, et plus précisément depuis 2007, quand j’ai commencé à utiliser Unity, utiliser correctement le moteur ou l’environnement de développement est tout simplement la bonne réponse.
Comme l’a dit Thomas : utilisez vos outils préférés !
Et j’ajoute : utilisez-les et apprenez-les jusqu’à ne plus rien pouvoir en apprendre ; c’est seulement alors que vous pourrez en tirer le meilleur.
Minimaliste est le maître-mot ici.
La deuxième scène : chargement asynchrone

Dans la deuxième scène, on monte un peu en gamme : on charge une UI de transition et un script de chargement asynchrone qui permet d’afficher une barre de progression du chargement au joueur !
La transition est un prefab et un singleton issu de mes Standard Assets, disponible en deux variantes : une transition avec des panneaux animés, et une image découpée avec un shader spécifique.

Le script de chargement est amélioré pour gérer l’affichage du prefab de transition une fois la scène chargée mais avant son activation. Une fois la scène activée, la transition est masquée comme par magie. Merci l’event handler (également inclus dans le package Standard Assets). Bien sûr, la barre de progression est mise à jour via un événement déclenché par un autre script qui surveille l’opération de chargement de la scène.
J’ai aussi ajouté un gestionnaire d’astuces pour que le joueur commence à voir quelque chose d’intéressant : il peut apprendre quelque chose et n’est plus embêté par un logo ou un écran figé.
Les astuces sont stockées dans des fichiers texte exportés dans des Asset Bundles.
Elles ne sont pas encore gérées comme des assets distants dans la démo, mais ce sera inclus dans une prochaine version.
Cette scène reste assez simple, mais elle nous permet de gravir une marche de plus.
À partir de cette scène, le joueur n’attend plus devant un écran statique, et on peut passer de l’autre côté… 🎵
La troisième scène : chargement des données

Cette scène peut être la première grosse scène de votre projet (bon, soyez prudent ici). Si vous avez des assets volumineux qui seront utilisés dans toutes les autres scènes de votre jeu, c’est dans cette scène qu’il faut les placer. Dans le template, j’ai inclus un object pool avec quelques assets d’exemple, juste pour vous montrer comment les gérer.
Musique, sources audio, ressources et tous les scripts de vérification propres à votre jeu peuvent intervenir ici.
Rappelez-vous : quand cette scène s’affiche, cela signifie que tout ce qu’elle contient a déjà été chargé !
Et dernier conseil, mais non le moindre : cette scène est la dernière qui ne sera chargée qu’une seule fois dans votre jeu. Tous les assets chargés ici ne seront plus rechargés, et vous ne devez jamais revenir à cette scène depuis votre jeu.
La quatrième scène : le menu

Elle peut être remplacée par n’importe quelle scène de votre choix, mais beaucoup de jeux ont un menu, alors j’ai décidé d’en inclure un ici. C’est une scène de menu principal simple avec un bouton play animé. Pour l’utiliser tout de suite, cherchez l’objet nommé PlayButton et remplacez le nom de scène par celle que vous voulez charger ensuite. Par défaut, il charge la scène game.
Dans le menu, j’ai inclus quelques petits plus :
- une image en mosaïque qui défile en arrière-plan
- un bouton play animé
- un effet de vignettage à l’aide d’une simple image au premier plan
Testez-le
Les packages sont disponibles gratuitement sur mon dépôt GitHub.
Pour utiliser ces quatre scènes, il suffit de les inclure dans le bon ordre dans vos build settings : elles sont préfixées par un numéro, ça ne devrait donc pas être trop compliqué.
Ce template utilise certains de mes autres standard assets gratuits, disponibles sur l’Unity Asset Store ainsi que sur mes dépôts GitHub.
Si vous décidez de les utiliser pour un projet, une game jam ou autre chose, dites-moi si cela vous a aidé ou si quelque chose peut être amélioré. Je ferai évoluer ce template au fil de mes nouveaux projets de jeux et je pourrais y intégrer les vôtres !
Merci de m’avoir lu jusqu’ici, et écrivez-moi sur FredericRP.com !