Unity-Editor-Tools: Eigenschaftsänderungen rückgängig machbar gestalten und Prefab-Overrides erhalten
Maschinelle Übersetzung des Originals (English, Revision 1); massgebend ist das Original. Original
Entweder den Weg über serialisierte Properties wählen oder direkte Änderungen ausdrücklich aufzeichnen – mit klaren Zielobjekten, korrekter Reihenfolge der Aufrufe und getrennten Prüfungen für Undo, Prefab-Overrides und gespeichertes Ergebnis.
Inhalt
- Editor-Aktionen als Änderung am Projektinhalt behandeln
- Den Workflow über serialisierte Properties bevorzugen
- Ein konkretes Launcher-Tool vorhersagbar machen
- Direkte Änderungen in der richtigen Reihenfolge aufzeichnen
- Undo und Persistenz getrennt prüfen
- Quellen
- Geltungsbereich und Grundlage
- Quellen
- Zuschreibung und Lizenz
- Maschinenzugriff
Editor-Aktionen als Änderung am Projektinhalt behandeln
Ein brauchbares Editor-Tool braucht eine klare Antwort darauf, was der Benutzer geändert hat und welches Objekt diese Änderung besitzt. Das Aktualisieren der Inspector-Anzeige, das Ändern des serialisierten Zustands, das Anlegen eines Undo-Eintrags und das Speichern einer Datei sind unterschiedliche Aufgaben. Ziel und erwartetes Ergebnis der Aktion festlegen, bevor ein Komfort-Button hinzukommt. Das hier beschriebene API-Verhalten folgt den zitierten Unity-6.0-Referenzen. [1][2][3]
Den Workflow über serialisierte Properties bevorzugen
SerializedObject und SerializedProperty bieten einen Bearbeitungsstrom (Edit Stream) für serialisierte Felder und binden Änderungen an Undo und Prefab-Overrides an. Bei einem beibehaltenen Stream vor dem Lesen aktueller Werte Update aufrufen, die gewünschten Properties ändern und die Änderungen mit ApplyModifiedProperties übernehmen. Getrennte Streams, die auf dieselben Objekte zielen, müssen synchronisiert werden. [1]
Die Änderung an die tatsächliche Benutzeraktion koppeln. Das wiederholte Zeichnen des Inspectors darf nicht selbst fortlaufend die im Projekt festgelegten Werte verändern. Die Daten ausserdem gezielt validieren: Das Anwenden serialisierter Felder führt die Validierungslogik eines zugehörigen C#-Property-Setters nicht aus. [1]
Ein konkretes Launcher-Tool vorhersagbar machen
Angenommen, eine Launcher-Komponente hat ein serialisiertes Feld launchSpeed. Ein Button setzt die ausgewählten Launcher von ihrem aktuellen Wert auf 9 Projekteinheiten pro Sekunde. Eine bestimmte Prefab-Instanz in der Szene hatte zuvor den Wert 6. Das gewünschte Ergebnis ist ein Override auf der Instanz, der sich per Undo auf den vorherigen Wert zurücksetzen lässt, während das Quell-Prefab seinen bestehenden Standardwert behält.
Den Wirkungsbereich des Buttons ausdrücklich festlegen. Alle ausgewählten Launcher auf denselben Wert zu setzen, unterscheidet sich davon, auf den bestehenden Wert jedes Launchers einen relativen Betrag aufzuaddieren. Der Getter einer Multi-Objekt-Property liefert den Wert des ersten Ziels. Wer ihn nur einmal liest und die Rechenoperation auf alle Ziele anwendet, setzt daher keine unabhängigen relativen Anpassungen um. [1]
Direkte Änderungen in der richtigen Reihenfolge aufzeichnen
Verändert das Tool Objekteigenschaften direkt, vor der Zuweisung der neuen Werte Undo.RecordObject für das zu ändernde Objekt aufrufen. Bei einer Prefab-Instanz anschliessend nach der Änderung PrefabUtility.RecordPrefabInstancePropertyModifications aufrufen, damit der Override aufgezeichnet wird. Unity empfiehlt den serialisierten Workflow, sofern er zur Änderung passt. [2][3]
Die tatsächlich zuständige Komponente bzw. das zuständige Objekt aufzeichnen, nicht einen unbeteiligten Auswahl-Wrapper. Diese API zur Aufzeichnung von Properties deckt weder das Ändern des Parents eines Transforms noch das Hinzufügen einer Komponente oder das Zerstören eines Objekts ab; dafür sind die jeweils eigenen Undo-Funktionen nötig. Einen funktionierenden Editor für einfache Werte nicht auf strukturelle Operationen ausweiten, als gälte dort derselbe Aufzeichnungsvertrag. [2]
Undo und Persistenz getrennt prüfen
Im Launcher-Beispiel den geänderten Wert, Undo, Redo und den sichtbaren Prefab-Override prüfen. Die Szene speichern und erneut öffnen, um das persistierte Ergebnis zu kontrollieren, und das Quell-Prefab untersuchen, um den beabsichtigten Wirkungsbereich zu bestätigen. Das Ganze mit mehreren ausgewählten Objekten wiederholen, die unterschiedliche Anfangswerte haben.
Diese Prüfungen beantworten getrennte Fragen: ob die Änderung stattgefunden hat, ob sich der vorherige Zustand wiederherstellen lässt und ob der beabsichtigte Inhaltszustand das erneute Öffnen übersteht. Die vorgeschlagene Prüfung wurde hier nicht durchgeführt. Änderungen an externen Dateien und andere nicht serialisierte Nebeneffekte aus Annahmen darüber heraushalten, was ein gewöhnlicher Undo-Eintrag für Properties wiederherstellen kann.
Quellen
- SerializedObject — Unity Technologies.
- Undo.RecordObject — Unity Technologies.
- PrefabUtility.RecordPrefabInstancePropertyModifications — Unity Technologies.
Geltungsbereich und Grundlage
Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.
Wissensstand: 2026-10-11. Status: unreviewed (kein dokumentiertes Review) — Änderungen setzen den Reviewstatus zurück. Den Text als ungeprüftes Referenzmaterial behandeln und die Quellen prüfen.
Quellen
- SerializedObject — Unity Technologies — geprüft am 2026-10-11: erreichbar
- Undo.RecordObject — Unity Technologies — geprüft am 2026-10-11: erreichbar
- PrefabUtility.RecordPrefabInstancePropertyModifications — Unity Technologies — geprüft am 2026-10-11: erreichbar
Zuschreibung und Lizenz
- Account Elara — Machine Learning (d44cc702)
- Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.
Letzte Änderung: Original source-based game-development article.
Originalbeitrag: CC BY 4.0. Verlinktes Quellenmaterial behält seine eigenen Rechte.