Was ist neu für Prefabs in 2022.2?

STEEN LUND / UNITY TECHNOLOGIESLead Developer
Nov 22, 2022|10 Min.
Was ist neu für Prefabs in 2022.2?
Diese Website wurde aus praktischen Gründen für Sie maschinell übersetzt. Die Richtigkeit und Zuverlässigkeit des übersetzten Inhalts kann von uns nicht gewährleistet werden. Sollten Sie Zweifel an der Richtigkeit des übersetzten Inhalts haben, schauen Sie sich bitte die offizielle englische Version der Website an.

Es ist eine Weile her, seit das Scene Management-Team ein Update zu Prefabs veröffentlicht hat. Während der letzten paar Versionen haben wir, nachdem wir eine große Zahl von Fehlern behoben haben, die Sie gemeldet haben (danke!), mehrere Verbesserungen am Prefab-System vorgenommen. Werfen wir einen Blick auf die einzelnen Verbesserungen in 2022.2 – jetzt als Betaversion verfügbar – und wie Sie von diesen Updates profitieren können.

Prefab-Asset durch Prefab-Instanz ersetzen

Sie können jetzt das Prefab-Asset durch eine Prefab-Instanz ersetzen, die entweder in einer Szene vorhanden oder in anderen Prefabs verschachtelt ist. Diese Funktion behält die Position, Rotation und Skalierung der Prefab-Instanz in der Szene bei, führt jedoch die Inhalte aus dem neuen Prefab-Asset zusammen und behält dabei so viele Überschreibungen und Referenzen wie möglich durch namensbasierte Übereinstimmung bei (standardmäßig). Genauer gesagt:

  • Der Inspektor für eine Prefab-Instanz verfügt über ein neues Objektfeld , das zum Ersetzen des Prefab-Assets verwendet werden kann.
  • Die Hierarchie verfügt über Kontextmenüs , die auf ähnliche Weise das Prefab-Asset der Instanz ersetzen können.
  • Schließlich kann ein einfaches GameObject über das Kontextmenü in der Hierarchie oder durch Ziehen und Ablegen mit der Modifikatortaste Strg/Befehl in eine Prefab-Instanz umgewandelt werden.
Prefab-Asset-Objektfeld
Ersetzen Sie ein einfaches GameObject durch eine Prefab-Instanz.
Ersetzen Sie das Prefab-Asset durch eine Prefab-Instanz.

Diese Funktion ist nicht nur in der Benutzeroberfläche verfügbar, sondern verfügt – wie die meisten von uns erstellten Funktionen – über eine API, mit der Sie verwalten können, wie Objekte abgeglichen werden und wie Overrides behandelt werden sollen. Siehe PrefabUtility.ReplacePrefabAssetOfPrefabInstanceund PrefabUtility.ConvertToPrefabInstance.

Neuanordnung hinzugefügter GameObjects und Komponenten

Eine der am häufigsten nachgefragten Verbesserungen war die Möglichkeit, hinzugefügte GameObjects und Komponenten neu anzuordnen. „Hinzugefügte GameObjects und Komponenten“ bezieht sich auf die GameObjects und Komponenten, die nicht Teil einer Prefab-Instanz sind, sondern der Prefab-Instanz in einer Szene oder innerhalb eines Variant- oder Nested Prefabhinzugefügt werden. So ist es ab 2022.1 möglich, die hinzugefügten GameObjects per Drag & Drop neu anzuordnen – sowohl untereinander als auch zwischen den zur Prefab-Instanz gehörenden GameObjects. Um diese Funktion bereitzustellen, war eine umfassende Umgestaltung des Undo- Systems erforderlich.

Wenn Sie hinzugefügte GameObjects aus einem Editor-Skript neu anordnen möchten, müssen Sie lediglich den Geschwisterindex für die Transformation des hinzugefügten GameObjects festlegen. Die Möglichkeit, hinzugefügte Komponenten im Inspector neu anzuordnen, ist in 2022.2 enthalten. Es gibt keine öffentliche API zum Neuanordnen von Komponenten.

GameObjects aus Prefab-Instanzen löschen

Das Letzte, was wir brauchten, um vollständige Funktionsparität zwischen GameObjects und Komponenten zu erreichen, war die Möglichkeit, GameObjects als Override aus Prefab-Instanzen zu löschen. Das Löschen von GameObjects als Overrides, eine in 2022.2 verfügbare Option, stellt sicher, dass nach dem Löschen eines GameObjects die üblichen Arbeitsabläufe zum Zurücksetzen von/Anwenden auf ein Prefab-Asset wie erwartet funktionieren.

Wenn es um ein Editor-Skript geht, verwenden Sie Object.DestroyImmediate , um Prefab-Instanzobjekte zu zerstören und die Zerstörung als Override aufzuzeichnen, der in der Szenendatei gespeichert ist.

Prefab-Variantenbeziehungen prüfen

Benutzer fragen häufig, wie der Variantenvererbungsbaum für ein bestimmtes Prefab-Asset aussieht. In 2022.2 haben wir dem Inspector das Popup „Prefab-Familie“ hinzugefügt. Der Inhalt des Popups hängt vom ausgewählten Prefab-Asset im Projektbrowserab. Nachdem Sie ein Prefab-Asset ausgewählt und das Popup „Prefab-Familie“ geöffnet haben, listet der Editor alle Vorgänger des aktuellen Prefabs sowie alle unmittelbaren untergeordneten Elemente auf.

Fertighaus-Familien-Popup

Entdecken Sie die verbesserten Override-Tools

Neben Anfragen zum Vererbungsbaum haben Benutzer häufig gefragt, wie sie ungenutzte Overrides loswerden können, die in einer Szene gespeichert, aber nie aufgerufen wurden (weil die Eigenschaft aus einem Skript entfernt wurde). Im schlimmsten Fall verweisen solche Eigenschaften auf Assets, die dann in den endgültigen Build übernommen werden und Platz auf dem Speichergerät und im Arbeitsspeicher belegen – aber nie verwendet werden.

Overrides werden jetzt als nicht verwendet gekennzeichnet für:

  • Null-Zielobjekte
  • Unbekannte Eigenschaftspfade (die nicht der Verwendung von „FormerlySerializedAsAttribute“ unterliegen)
  • Entfernte Komponenten
  • Entfernte GameObjects
  • Geänderte Array-Dimensionen (z. B. Material-Array)

Wenn Sie eine oder mehrere Prefab-Instanzen in der Hierarchie auswählen und das Dropdown-Menü „Overrides“ öffnen, zeigt der Editor jetzt an, ob nicht verwendete Overrides vorhanden sind. Sie können sie dann mithilfe des neuen Dropdown-Menüs „Ungenutzte Überschreibungen“ aus der Szene entfernen.

Dropdown-Liste „Ungenutzte Überschreibungen“

Darüber hinaus können Sie alle nicht verwendeten Overrides in einer Szene über das Szenenkontextmenü der Hierarchie oder über das Kontextmenü für eine beliebige Auswahl von Prefab-Instanzen entfernen.

Entfernen Sie unbenutzte Overrides

Wir entfernen nicht verwendete Overrides nicht automatisch. Schließlich lässt sich der Grund ihrer Existenz nicht erschließen. Das Entfernen einer Eigenschaft aus einem Skript oder das Löschen eines Assets sollte nicht automatisch nicht verwendete Overrides entfernen, da Sie das Entfernen später möglicherweise rückgängig machen und die Overrides wiederherstellen möchten.

Falls Sie sich fragen: „Warum habe ich nach dem Drücken von ‚Alles anwenden‘ immer noch Overrides auf meiner Prefab-Instanz?“ Die Antwort ist, dass diese Overrides einfach nicht auf das Prefab-Asset angewendet werden können. Am häufigsten handelt es sich bei solchen Overrides um Verweise auf andere Objekte in der Szene, auf die vom Prefab-Asset aus nicht verwiesen werden kann. Overrides, die normalerweise nicht anwendbar sind, werden jetzt im Inspektor durch einen dunkelblauen Balken hervorgehoben. Diese können nicht angewendet, sondern nur rückgängig gemacht werden.

Lernen Sie diese weiteren Verbesserungen kennen

Sie können jetzt das Standardverhalten beim Öffnen des Prefab-Modus von „Im Kontext“in „In Isolation“ ändern. Um diese Änderung vorzunehmen, gehen Sie zu Editoreinstellungen > Allgemein > Standard-Prefab-Modus .

Standard-Prefab-Modus in den Editoreinstellungen

Jetzt, mit 2022.2, wird Rückgängigmachen beim Verlassen des Prefab-Modus als einzelner Rückgängig-Vorgang aufgezeichnet. Dies führt dazu, dass alle am Prefab vorgenommenen Änderungen rückgängig gemacht werden, wenn Sie nach dem Verlassen des Prefab-Modus eine Rückgängig-Aktion durchführen.

Im Laufe mehrerer Versionen wurden die Fehlerbehandlung und -berichterstattung während des Ladens von Szenen (und des Ladens von Prefabs im Prefab-Modus) erheblich verbessert und zeigen jetzt an, mit welchen Prefabs die Fehler zusammenhängen und/oder die GUID für fehlende Prefabs. Tatsächlich ist die Art und Weise, wie wir mit fehlenden Prefab-Assets während des Szenenladens umgehen, sicherer und stabiler als zuvor.

Um die Fehlerbehandlung weiter zu verbessern und die Einführung fehlerhafter Daten in Ihr Projekt zu vermeiden, haben wir einen defekten Prefab-Asset-Typhinzugefügt, der vom Prefab-Importer erstellt wird, wenn Fehler auftreten, die nicht behoben werden können.

Der häufigste Fall ist, dass eine Prefab-Variante ihr übergeordnetes Prefab verloren hat, möglicherweise weil es gelöscht wurde. In diesem Fall können wir keine sinnvolle Prefab-Variante erstellen, daher wird stattdessen ein defektes Prefab-Asset erstellt. Dieses neue Asset zeigt Informationen zu Fehlern im Inspektor an, wenn es im Projektbrowser ausgewählt wird. Wenn ein übergeordnetes Prefab fehlt, wird die GUID des fehlenden Prefabs angezeigt. Alternativ können Sie, wenn eine Kette von Prefab-Varianten unterbrochen ist, die Kette über den Inspector nach oben durchgehen, bis Sie die Variante mit dem fehlenden übergeordneten Element finden.

Prefab-Varianten-Asset wird als defektes Prefab angezeigt, da übergeordnetes Prefab verloren gegangen ist

Das Konzept der getrennten Prefab- Instanzen existiert ab 2022.1 nicht mehr. Wir unterstützen weiterhin das Laden getrennter Prefab-Instanzen, aber wenn der Editor beim Laden der Szene auf sie stößt, werden alle Prefab-Informationen der getrennten Prefab-Instanzen gelöscht und sie werden zu regulären GameObjects.

Wie erwähnt hat unser Team eine Reihe von Fehlern behoben, die Sie uns im Laufe der Zeit freundlicherweise gemeldet haben. Einige davon stammen aus dem ursprünglichen Prefab-System, viele sind jedoch erst mit der Einführung unserer verbesserten Prefabs deutlich geworden.

Heute sind wir davon überzeugt, dass Sie die Stabilität des neuesten Prefab-Systems genießen werden. Wir hoffen, dass die Arbeit damit reibungslos und effizient für Sie verläuft.

Haben Sie weitere Fragen oder Kommentare zu Prefab? Teilen Sie uns in den Foren Ihr Feedback mit.