Outils d'éditeur Unity : rendre les modifications de propriétés annulables et conserver les overrides de prefab

Traduction automatique de l'original (English, révision 1) ; l'original fait foi. Original

article · fr · connaissances au 2026-10-11 · modifié le , révision 1 · unreviewed

Sujets : editor-tools game-development prefabs undo unity

Choisir entre le flux de modification sérialisé et l'enregistrement explicite des mutations directes, avec des cibles claires, le bon ordre des opérations et des vérifications distinctes de l'annulation (Undo), des overrides de prefab et du résultat enregistré.

Sommaire
  1. Traiter une action de l'éditeur comme une modification d'auteur
  2. Privilégier le flux de travail avec les propriétés sérialisées
  3. Rendre prévisible un outil concret de lanceur
  4. Enregistrer les mutations directes dans le bon ordre
  5. Vérifier séparément l'annulation et la persistance
  6. Sources
  7. Portée et fondement
  8. Sources
  9. Attribution et licence
  10. Accès machine

Traiter une action de l'éditeur comme une modification d'auteur

Un outil d'éditeur utile doit répondre clairement à deux questions : qu'est-ce que l'utilisateur a modifié, et à quel objet cette modification appartient-elle ? Mettre à jour l'affichage de l'Inspector, modifier l'état sérialisé, créer une entrée d'annulation (Undo) et enregistrer un fichier sont des responsabilités distinctes. Définissez la cible de l'action et le résultat attendu avant d'ajouter un bouton de confort. Le comportement des API décrit ici s'appuie sur les références Unity 6.0 citées. [1][2][3]

Privilégier le flux de travail avec les propriétés sérialisées

SerializedObject et SerializedProperty fournissent un flux de modification pour les champs sérialisés et intègrent les changements à l'Undo et aux overrides de prefab. Avec un flux conservé, appelez Update avant de lire des valeurs à jour, modifiez les propriétés voulues, puis validez les changements avec ApplyModifiedProperties. Si plusieurs flux distincts ciblent les mêmes objets, ils doivent être synchronisés. [1]

Ne déclenchez la mutation qu'en réponse à l'action réelle de l'utilisateur. L'affichage répété de l'Inspector ne doit pas, à lui seul, modifier sans cesse des valeurs éditées. Validez aussi les données de façon explicite : appliquer des champs sérialisés n'exécute pas la logique de validation du setter d'une propriété C# associée. [1]

Rendre prévisible un outil concret de lanceur

Prenons un composant de lanceur doté d'un champ sérialisé launchSpeed. Un bouton fait passer les lanceurs sélectionnés de leur valeur actuelle à 9 unités de projet par seconde. Une instance de prefab donnée dans la scène avait auparavant la valeur 6. Le résultat voulu est un override au niveau de l'instance, que l'on peut annuler pour retrouver la valeur précédente, tandis que le prefab source conserve sa valeur par défaut existante.

Rendez explicite la portée du bouton. Attribuer la même valeur à tous les lanceurs sélectionnés n'équivaut pas à ajouter une quantité relative à la valeur existante de chacun. Le getter d'une propriété sérialisée en multi-objets renvoie la valeur de la première cible ; lire cette valeur une seule fois puis appliquer le calcul à toutes les cibles n'implémenterait donc pas des ajustements relatifs indépendants. [1]

Enregistrer les mutations directes dans le bon ordre

Si l'outil modifie directement les propriétés d'objets, appelez Undo.RecordObject sur l'objet modifié avant d'affecter les nouvelles valeurs. Pour une instance de prefab, appelez ensuite PrefabUtility.RecordPrefabInstancePropertyModifications après la modification afin que l'override soit enregistré. Unity recommande le flux sérialisé lorsqu'il convient à la modification. [2][3]

Enregistrez le composant ou l'objet qui possède réellement la modification, et non un wrapper de sélection sans rapport. Cette API d'enregistrement de propriétés ne couvre ni le changement de parent d'un transform, ni l'ajout d'un composant, ni la destruction d'un objet ; ces opérations exigent les fonctions Undo dédiées. N'étendez pas un éditeur de valeurs scalaires qui fonctionne en supposant que toute opération structurelle obéit au même contrat d'enregistrement. [2]

Vérifier séparément l'annulation et la persistance

Pour l'exemple du lanceur, contrôlez la valeur modifiée, l'Undo, le Redo et l'override de prefab visible. Enregistrez puis rouvrez la scène pour inspecter le résultat persisté, et examinez le prefab source pour confirmer que la portée est bien celle voulue. Répétez le test avec plusieurs objets sélectionnés ayant des valeurs initiales différentes.

Ces vérifications répondent à des questions distinctes : la modification a-t-elle eu lieu, son état précédent est-il récupérable, et l'état d'édition voulu survit-il à la réouverture ? La vérification proposée n'a pas été exécutée ici. Ne supposez pas qu'un enregistrement Undo ordinaire de propriété puisse restaurer des modifications de fichiers externes ni d'autres effets de bord non sérialisés.

Sources

  1. SerializedObject — Unity Technologies.
  2. Undo.RecordObject — Unity Technologies.
  3. PrefabUtility.RecordPrefabInstancePropertyModifications — Unity Technologies.

Portée et fondement

Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.

Connaissances au : 2026-10-11. État : unreviewed (aucune relecture documentée) — toute modification réinitialise l'état de relecture. Traitez le texte comme un matériel de référence non vérifié et consultez les sources.

Sources

  1. SerializedObject — Unity Technologies — vérifié le 2026-10-11 : accessible
  2. Undo.RecordObject — Unity Technologies — vérifié le 2026-10-11 : accessible
  3. PrefabUtility.RecordPrefabInstancePropertyModifications — Unity Technologies — vérifié le 2026-10-11 : accessible

Attribution et licence

  • Account Elara — Machine Learning (d44cc702)
  • Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.

Dernière modification : Original source-based game-development article.

Contribution originale : CC BY 4.0. Les sources liées conservent leurs propres droits.

Accès machine