Quelles sont les nouveautés pour les préfabriqués dans la version 2022.2 ?

Cela fait un moment que l'équipe de Scene Management n'a pas partagé de mise à jour sur les Prefabs. Au cours des dernières versions, et après avoir corrigé un grand nombre de bogues que vous nous avez signalés (merci !), nous avons apporté plusieurs améliorations au système Prefab. Examinons chaque amélioration apportée par la version 2022.2 - actuellement disponible en version bêta - et les avantages que ces mises à jour peuvent vous apporter.
Vous pouvez désormais remplacer l'actif d'un préfabriqué par une instance de préfabriqué qui existe soit dans une scène, soit imbriquée dans d'autres préfabriqués. Cette fonction permet de conserver la position, la rotation et l'échelle de l'instance Prefab dans la scène, mais de fusionner le contenu du nouvel actif Prefab, tout en conservant le plus grand nombre possible de dérogations et de références par le biais d'une correspondance basée sur le nom (par défaut). Plus précisément :
- L'inspecteur d'une instance de préfabriqué dispose d'un nouveau champ d'objet qui peut être utilisé pour remplacer le bien préfabriqué.
- La hiérarchie dispose de menus contextuels qui peuvent remplacer de la même manière le composant Prefab de l'instance.
- Enfin, un simple GameObject peut être converti en instance Prefab par le biais du menu contextuel dans la hiérarchie, ou par glisser-déposer avec la touche de modification Ctrl/Cmd.



Cette fonctionnalité n'est pas seulement disponible dans l'interface utilisateur, mais comme pour la plupart des fonctionnalités que nous créons, elle dispose d'une API qui vous permet de gérer la manière dont les objets sont mis en correspondance, ainsi que la manière dont les dérogations doivent être traitées. Voir PrefabUtility.ReplacePrefabAssetOfPrefabInstanceet PrefabUtility.ConvertToPrefabInstance.
L'une des améliorations les plus demandées est la possibilité de réorganiser les objets de jeu et les composants ajoutés. Les "GameObjects et composants ajoutés" font référence aux GameObjects et composants qui ne font pas partie d'une instance de préfabriqué, mais qui sont ajoutés à l'instance de préfabriqué dans une scène ou à l'intérieur d'une variante ou d'un préfabriqué imbriqué. Ainsi, à partir de la version 2022.1, il est possible de réorganiser les GameObjects ajoutés par glisser-déposer - à la fois entre eux et entre les GameObjects appartenant à l'instance Prefab. La préparation de cette fonctionnalité a nécessité une refonte majeure du système d'annulation.
Si vous souhaitez réorganiser les GameObjects ajoutés à partir d'un script de l'éditeur, il suffit de définir l'index des frères et sœurs sur la transformation du GameObject ajouté. La possibilité de réorganiser les composants ajoutés dans l'inspecteur est incluse dans la version 2022.2. Il n'existe pas d'API publique pour réorganiser les composants.
La dernière chose dont nous avions besoin pour obtenir une parité totale entre les GameObjects et les composants était la possibilité de supprimer les GameObjects des instances Prefab en tant qu'Override. La suppression des GameObjects en tant qu'Overrides, une option disponible dans la version 2022.2, garantit qu'une fois que vous avez supprimé un GameObject, les flux de travail habituels pour revenir/appliquer à un Prefab Asset fonctionnent comme vous vous y attendez.
Lorsqu'il s'agit d'un script de l'éditeur, utilisez Object.DestroyImmediate pour détruire les objets de l'instance Prefab et enregistrer la destruction en tant qu'Override dans le fichier de scène.
Les utilisateurs demandent souvent à quoi ressemble l'arbre d'héritage des variantes pour un bien préfabriqué spécifique. Dans la version 2022.2, nous avons ajouté la fenêtre contextuelle Famille préfabriquée à l'inspecteur. Le contenu de la fenêtre dépend de l'élément Prefab sélectionné dans le navigateur de projet. Après avoir sélectionné un élément préfabriqué et ouvert la fenêtre contextuelle Famille préfabriquée, l'éditeur dresse la liste de tous les ancêtres du préfabriqué actuel, ainsi que de tous ses enfants immédiats.

Outre les questions relatives à l'arbre d'héritage, les utilisateurs ont souvent demandé comment se débarrasser des surcharges inutilisées stockées dans une scène mais auxquelles on n'a jamais accédé (parce que la propriété a été supprimée d'un script). Dans le pire des cas, ces propriétés peuvent référencer des actifs qui sont ensuite intégrés dans la version finale, occupant de l'espace sur le périphérique de stockage et dans la mémoire, mais qui ne sont jamais utilisés.
Les dérogations sont désormais signalées comme non utilisées :
- Objets cibles nuls
- Chemins d'accès aux propriétés inconnues (qui ne sont pas soumis à l'utilisation de FormerlySerializedAsAttribute par le biais de scripts)
- Composants retirés
- Objets de jeu supprimés
- Modification des dimensions du tableau (par exemple, tableau des matériaux)
Lorsque l'on sélectionne une ou plusieurs instances de préfabrication dans la hiérarchie et que l'on ouvre le menu déroulant des dérogations, l'éditeur indique désormais s'il existe des dérogations inutilisées. Vous pouvez ensuite les supprimer de la scène à l'aide de la nouvelle liste déroulante des dérogations inutilisées.

De plus, vous pouvez supprimer toutes les surcharges inutilisées dans une scène via le menu contextuel de la scène de la hiérarchie ou via le menu contextuel d'une sélection arbitraire d'instances de préfabriqués.

Nous ne supprimons pas automatiquement les dérogations non utilisées. En effet, la raison de leur existence ne peut être déduite. La suppression d'une propriété d'un script ou la suppression d'un actif ne doit pas automatiquement supprimer les dérogations inutilisées, car il se peut que vous souhaitiez par la suite annuler la suppression et restaurer les dérogations.
Au cas où vous vous poseriez la question : "Pourquoi y a-t-il encore des Overrides sur mon instance Prefab après avoir cliqué sur 'Apply All' ? La réponse est que ces Overrides ne peuvent tout simplement pas être appliqués à l'élément Prefab. Le plus souvent, ces dérogations sont des références à d'autres objets de la scène qui ne peuvent pas être référencés à partir de l'élément préfabriqué. Les dérogations qui ne sont généralement pas applicables sont désormais mises en évidence par une barre bleu foncé dans l'inspecteur. Elles ne peuvent pas être appliquées, mais seulement annulées.
Vous pouvez désormais modifier le comportement par défaut lors de l'ouverture du mode préfabriqué en choisissant " En isolation" au lieu de " En contexte". Allez dans Préférences de l'éditeur > Général > Mode de préfabrication par défaut pour effectuer cette modification.

Désormais, avec la version 2022.2, l'annulation est enregistrée comme une seule opération d'annulation lorsque l'on quitte le mode préfabriqué. Ainsi, toutes les modifications apportées à la préfabrication seront annulées si vous effectuez une annulation après avoir quitté le mode préfabrication.
Au fil des versions, la gestion et le rapport des erreurs lors du chargement des scènes (et du chargement des préfabriqués en mode préfabriqué) ont été considérablement améliorés et indiquent désormais les préfabriqués concernés par les erreurs et/ou le GUID des préfabriqués manquants. En fait, la façon dont nous gérons les actifs manquants des préfabriqués lors du chargement de la scène est plus sûre et plus stable qu'auparavant.
Afin d'améliorer la gestion des erreurs et d'éviter d'introduire des données erronées dans votre projet, nous avons ajouté un type d'actif Prefab brisé, qui sera produit par l'importateur Prefab en cas d'erreurs qui ne peuvent être corrigées.
Le cas le plus courant est celui où une variante de préfabriqué a perdu son préfabriqué parent, peut-être parce qu'il a été supprimé. Dans ce cas, nous ne pouvons pas produire une variante de préfabriqué significative, c'est pourquoi un élément de préfabriqué cassé est créé à la place. Cette nouvelle ressource affichera des informations sur ce qui ne va pas dans l'inspecteur lorsqu'elle est sélectionnée dans le navigateur de projet. S'il s'agit d'un parent de préfabriqué manquant, le GUID du préfabriqué manquant est affiché. Sinon, s'il s'agit d'une chaîne de variantes préfabriquées, vous pouvez remonter la chaîne par l'intermédiaire de l'inspecteur jusqu'à ce que vous trouviez la variante dont le parent est manquant.

Le concept d'instances préfabriquées déconnectées n'existe plus depuis la version 2022.1. Nous prenons toujours en charge le chargement des instances de préfabriqués déconnectés, mais lorsque l'éditeur les rencontre lors du chargement de la scène, les instances de préfabriqués déconnectés sont dépouillées de toutes leurs informations de préfabriqué et deviennent des objets de jeu normaux.
Comme indiqué, notre équipe a corrigé une série de bogues que vous nous avez gracieusement signalés au fil du temps. Certains d'entre eux découlent du système Prefab original, mais beaucoup ne sont apparus qu'avec l'introduction de nos Prefabs améliorés.
Aujourd'hui, nous sommes convaincus que vous apprécierez la stabilité du dernier système Prefab. Nous espérons que vous le trouverez facile à utiliser et efficace.
Vous avez d'autres questions ou commentaires sur les préfabriqués ? Rejoignez-nous sur les forums pour nous faire part de vos commentaires.
