[Unity] Le Prefab en 2018.3 : Une Nouvelle Façon De Penser
Le Prefab, cet ami sympa, mais parfois super relou
Et si je vous disais que le système de Prefab est tout pourri ?
Quand on utilise beaucoup un outil, on finit toujours par arriver à le pousser dans ses derniers retranchements. C’est le cas pour le système de Prefabs (qui n’est pas si pourri que ça, soyons honnêtes).
Il a des limitations qui peuvent sérieusement amputer votre productivité dans certains cas de figure. Sachant que c’est un outil qui est là pour vous faire gagner du temps, c’est quand même assez moche…
Un outil qui ne répond plus aux attentes
Le principe fondamental du Prefab, c’est de vous permettre de créer des modèles de GameObjects pour les réutiliser où vous voulez, quand vous voulez dans votre projet.
Jusque là, tout va bien, c’est une bonne idée non ? Sauf si vous voulez l’utiliser pour faire du Level Design.
Si vous ne creusez pas trop loin, ça ne devrait pas vous poser de problème. Mais dès que vous allez essayer de créer des environnements complexes avec des variations sans vouloir y passer 200 heures par scène, là c’est un autre sujet…
S’il y a un truc super important en level design, c’est la variété. Posez le même groupe de GameObjects 150 fois sur votre scène et vous pouvez être sûr que ça va faire exploser l’immersion de votre joueur. Il va le voir. Et ça ne sera pas agréable pour lui.
Vous avez donc des Prefabs de base et vous voulez des variations. C’est là que ça devient fun (ou pas). Vous pouvez modifier à la main chaque instance de vos Prefabs pour créer les modifications spécifiques. Sauf qu’à la fin, vous allez perdre toute la puissance du Prefab qui permet de diffuser une modification sur toutes les instances utilisées.
Autrement dit, si vous faites des modifications sur tous les Prefabs de votre scène, vous êtes grillé.e. Un peu comme ces brochettes :
Vous avez peut-être eu la lumineuse idée de mettre un Prefab dans un Prefab. Après tout, vous modifiez juste le sous-prefab et il sera mis à jour partout. Problem solved !
Sauf que non. Je vous arrête tout de suite… ce n’est pas possible. Pas dans le système de Prefabs avant la version 2018.3 en tout cas.
Lorsque vous créez un Prefab, Unity casse tous les liens vers les autres Prefabs qui pourraient être dedans. C’est comme ça. Vous n’y pouvez rien. Faut faire avec.
À moins que…
Tel le Phoenix, le Prefab renaît de ses cendres en 2018.3
Dans son effort de modernisation du moteur, Unity Technologies a effectué une refonte complète du fonctionnement de la hiérarchie dans la version 2018.3.
Et devinez ce qu’ils ont changé au passage ? Le système de Prefab bien entendu. Sortez le champomy et les chips !
Ce nouveau système 2.0 apporte les choses suivantes :
- Les Prefabs imbriqués (il était temps !)
- Le concept de variantes de Prefab : la personnalisation sans perdre les avantages du Prefab
- Un nouveau mode d’édition des Prefabs
Nouvelle interface de hiérarchie
L’affichage de la hiérarchie est légèrement modifié. Rien de bien méchant, rassurez-vous. Dans le listing des GameObject, vous avez toujours les noms affichés en bleu si c’est un Prefab. Mais en plus, vous avez maintenant un petit cube à côté, lui aussi bleu ou gris selon si c’est un Prefab ou pas :
Si vous regardez bien, vous verrez également des petits chevrons sur la droite, mais uniquement pour les Prefabs.
Et si vous regardez encore mieux, vous verrez aussi que l’un des Prefabs a une icône bizarre, mais on y reviendra un peu plus bas.
En cliquant sur un chevron, on rentre dans le mode d’édition d’un Prefab. C’est nouveau. Maintenant, pour éditer un Prefab, il faut rentrer dans ce nouveau mode dans lequel vous ne verrez plus rien à part votre Prefab :
De là, vous pouvez faire vos modifications… ou bien directement accéder à un sous-prefab pour le modifier en utilisant le chevron dans la hiérarchie :
Franchement, c’est de l’or en barre cette feature. Vous pouvez “remonter d’un cran” dans la hiérarchie de Prefabs en utilisant le chevron qui part vers la gauche en haut de la hiérarchie afin de retourner sur la scène.
Nouvelle interface de gestion des Prefabs
Il n’y a pas que la hiérarchie qui a changé. L’interface de l’inspecteur a elle aussi subi un petit lifting. Les anciens boutons ont cédé leur place à deux boutons “Open” et “Select” ainsi qu’une nouvelle liste déroulante “Overrides” :
- Le bouton “Open” permet d’ouvrir le Prefab en édition
- Le bouton “Select” lui ne change pas. Il permet toujours de sélectionner le Prefab dans la fenêtre Project. Très utile sur des gros projets
- Enfin, la liste déroulante Overrides permet de gérer les modifications
C’est là que ça devient VRAIMENT chouette. Sur la système précédent, vous pouviez juste appliquer la totalité des modifications sur un Prefab. Autant dire qu’il était facile de se gourer et d’enregistrer des mauvaises valeurs… Mais c’est fini ce temps-là.
La fenêtre Overrides vous liste tous les composants qui ont été modifiés par rapport au Prefab. D’un seul coup d’oeil, vous pouvez voir ce qui a changé. Mais ça va encore plus loin (ils n’ont pas fait les choses à moitié sur ce point-là).
En sélectionnant un composant dans la liste déroulante, vous pouvez voir le détail champ par champ :
Sur cet exemple, c’est la position qui a été modifiée par rapport à la source. Incroyable non ? Mais ce n’est pas fini. Vous pouvez choisir d’appliquer la modification d’un seul champ dans un composant par exemple. Plus besoin de tout enregistrer. Fini les enregistrements par erreur. Vous avez maintenant la possibilité d’une précision extrême.
L’arrivée des Variantes
Nouvelle fonctionnalité ajoutée avec ce nouveau système : les variantes.
Auparavant, vous pouviez personnaliser une instance d’un Prefab sur la scène. Ces valeurs n’étaient alors pas écrasées par les modifications apportées sur le modèle. Les variantes sont basées sur le même principe… sauf qu’elles fonctionnent comme des Prefabs classiques.
Vous pouvez avoir un Prefab “Porte” et créer une variante de ce Prefab “Porte bleue” qui hérite de tous les attributs du Prefab “Porte”, mais qui change juste sa couleur. Si vous changez l’échelle dans le Prefab “Porte” elle sera reportée sur le Prefab “Porte bleue”. Par contre, si vous changez la couleur, elle ne sera pas reportée puisqu’elle est surchargée dans “Porte bleue”.
C’est facile de faire la différence entre un GameObject classique et un Prefab, mais comment on fait la différence entre un Prefab et une variante ?! Il y a deux indicateurs. Tout d’abord, l’icône de cube bleu dans la hiérarchie est légèrement différente :
La variante va avoir un cube avec des petites flèches qui représentent un embranchement.
Le second endroit est dans l’inspecteur. C’est discret, mais très explicite. Pour un Prefab, le texte sera “Prefab” :
Pour une variante, le texte sera “Variant” :
(notez la petite icône de cube avec les flèches)
Un nouvel outil, une nouvelle façon de travailler
Tous ces nouveaux outils n’auront aucun impact direct sur votre quotidien. Le système fonctionne globalement de la même manière et vous pouvez continuer d’utiliser les Prefabs comme avant.
Mais ils rendent possible une nouvelle façon de travailler avec l’imbrication. C’est une autre façon de penser qui peut sérieusement vous faire gagner un temps colossal. Il faut penser en termes de briques de contenus qui vont être assemblées pour créer votre contenu final.
Ce système, c’est :
- Moins de manipulations à faible valeur ajoutée
- Plus de variété dans le contenu final
- Plus de temps pour faire autre chose
Le nouveau workflow de Prefabs est disponible à partir de la version 2018.3 de Unity. C’est directement intégré au moteur, vous n’avez rien à installer, alors ça serait dommage de vous priver de cette fonctionnalité !
Envie d’en savoir plus ?
Je m’appelle Alex Frêne, je suis enseignant en école de Game Design et développeur Unity. Je crée régulièrement des contenus d’apprentissage autour d’Unity que vous pouvez retrouver sous différents formats :
- sur mon blog.
- en vidéo sur ma chaîne YouTube.
Happy Gamedev !