World Locking Tools-Kontext und Manager-Einstellungen
Der World Locking Tools-Kontext ermöglicht eine parametrische Anpassung des World Locking Tools Managers im Unity Inspector.
Die Komponente WorldLockingContext stellt zwar eine Benutzeroberfläche für WorldLockingManager dar, aber Sie müssen verstehen, dass sie nicht identisch sind, und für einige Situationen ist es entscheidend, dass Sie ihre Beziehung verstehen.
Der Manager ist ein Singleton
Der WorldLockingManager ist ein Singleton, das bei Bedarf erstellt und für die Lebensdauer der Anwendung persistiert wird. Wenn keine Aufrufe an den WorldLockingManager erfolgen, wird er nie instanziiert. Nach der Instanziierung bleibt er live, bis die Anwendung heruntergefahren wird. Er wird nie zerstört und erneut instanziiert.
Der WorldLockingManager ist kein Unity-Objekt, er ist eine generische C#-Klasse. Sein Update wird von einer Unity-Proxykomponente gesteuert, einer Instanz der privaten WorldLockingManager.UpdateProxy-Klasse. Ansonsten ist er unabhängig von den Erstellungs-/Update-/Zerstörungszyklen von Unity.
Der Kontext ist eine Unity-Komponente
Der WorldLockingContext ist eine Unity-Komponente, die einem Objekt in der Szene auf übliche Weise hinzugefügt wird. Die Felder treten im Unity Inspector wie alle anderen regulären Felder der Unity-Komponente auf.
Mehrere aktive WorldLockingContext-Instanzen in einer einzelnen Szene zu haben, ist zwar kein Fehler, aber wahrscheinlich nicht erwünscht, da das Verhalten undefiniert wäre, abhängig von der unbekannten Reihenfolge der Objektladevorgänge.
Die Einstellungen für einen Kontext werden angewendet, wenn der WorldLockingContext geladen wird. Insbesondere pusht der Kontext seine Einstellungen in seinem OnEnable-Aufruf an den World Locking Tools Manager, und jedes Mal, wenn seine Szene zur aktiven Szene wird. Letzteres wird als Teil des Unity.SceneManager.activeSceneChanged-Rückrufs angewendet, wenn und nur dann, wenn die neue aktive Szene die Szene ist, zu der der Kontext gehört.
Alle Einstellungen können über das Skript angewendet werden
Zu jedem Zeitpunkt der Runtime kann die Anwendung über ein Skript benutzerdefinierte Einstellungen auf den WorldLockingManager anwenden. Wenn das Löschen und Neuerstellen von Ressourcen erforderlich ist, um eine Änderung der Einstellungen zu bewirken, erfolgt diese Wiederherstellung sofort bei der Änderung der Einstellungen.
Mit einigen praktischen Membern wie z. B. AutoSave können zwar einzelne Eigenschaftswerte aus dem WorldLockingManager abgerufen werden, aber das Festlegen von Parametern erfolgt immer in aggregierter Form. Code zum Umschalten der Features AutoMerge und AutoRefreeze könnte beispielsweise wie folgt aussehen:
/// Get a copy of the current settings
var settings = WorldLockingManager.GetInstance().Settings;
/// Modify the copy
settings.AutoMerge = !settings.AutoMerge;
settings.AutoRefreeze = !settings.AutoRefreeze;
/// Update the current settings to the values in the copy.
WorldLockingManager.GetInstance().Settings = settings;
Gleiches gilt für die Diagnoseeinstellungen.
Beachten Sie, dass das gleichzeitige Ändern mehrerer Einstellungen auf diese Weise nur die Kosten für eine einzelne Neuerstellung verursacht (sofern erforderlich).
Rangfolge der Einstellungen
Die Regeln für die derzeit auf WorldLockingManager angewendeten Einstellungen sind sehr einfach:
Wenn keine Szene mit einem Kontext geladen wurde und keine Einstellungen explizit vom Skript festgelegt wurden, verfügt der WorldLockingManager über Standardeinstellungen.
Eine Einstellung behält ihren Wert bei, bis sie von einem WorldLockingContext-Ladevorgang mit einer Szene oder einer expliziten Änderung überschrieben wird, die von der Anwendung im Skript aufgerufen wird.
Beim Kombinieren von Einstellungen des World Locking Tools Managers aus Kontexten und Einstellungen aus Skripts ist Vorsicht geboten. Da der Kontext seine Einstellungen immer beim Laden anwendet, wird ein Skript, das die Einstellung während des Ladens insbesondere aus seinem OnEnable-Rückruf manuell anwendet, wahrscheinlich Racebedingungen und unbestimmtes Verhalten aufweisen.
Verfügbare Einstellungen
Die verfügbaren Einstellungen zum Steuern des Verhaltens von World Locking Tools sind wie folgt in Gruppen unterteilt.
Automatisierungseinstellungen
Automatisierungseinstellungen steuern das Runtimeverhalten des World Locking Tools Managers. Die für Änderungen verfügbaren Felder und ihre Auswirkungen sind in der ManagerSettings-Klasse dokumentiert. Sie konzentrieren sich auf das Aktivieren oder Deaktivieren automatisierter periodischer Aktionen durch den Manager. Jede deaktivierte automatisierte Aktion kann stattdessen manuell ausgeführt werden.
Bindungseinstellungen
Bindungseinstellungen werden verwendet, um die Szene GameObjects
explizit zu definieren, deren Transformationen zum Anwenden der Korrekturen der World Locking Tools verwendet werden.
Mit dem Feld „Use Existing“ (Vorhandene verwenden) können die verknüpften Objekte einmal in der Szene mit der Kameraplattform festgelegt (mit „Use Existing“ gleich FALSE) und (mit „Use Existing“ gleich TRUE) kann ihr Überschreiben durch Laden nachfolgender Inhaltsszenen verhindert werden.
Umgekehrt ermöglicht das Festlegen von „Use Existing“ auf FALSE, mehrere mit jeweils anderer Kameraplattform aufgenommene Szenen an die entsprechenden Stellen in der Hierarchie der Kamera zu binden.
Beim Erstellen und Verwalten der Kamerahierarchie vom Skript aus sollte das Feld „Use Existing“ für alle Kontexte auf TRUE festgelegt und die Bindungen explizit von dem Skript aus, das die Kamera verwaltet, aktualisiert werden.
Wenn die erforderlichen Transformationen nicht angegeben werden, d. h. entweder als NULL belassen werden oder alle Kontexte über „Vorhandene verwenden“ verfügen, gibt das System eine Warnung aus und versucht, die beste Auswahl zu treffen. Es ist ratsam, aber nicht erforderlich, die entsprechenden Transformationen explizit festzulegen, anstatt das System raten zu lassen.
Es gibt zwei zusätzliche Optionen, die steuern, wie die Korrektur der Kameratransformation angewendet wird.
Das erste Kontrollkästchen für „Apply Adjustment“ (Anpassung anwenden) ist standardmäßig aktiviert. Dadurch wird das System angewiesen, die berechnete Kamerakorrektur für jeden Frame auf den „Adjustment Frame“ (Anpassungsrahmen) GameObject
anzuwenden. Das Deaktivieren dieser Funktion ist ein sehr erweitertes Feature, das erst getestet werden sollte, nachdem alle anderen Probleme behoben wurden und Sie ein umfassendes Verständnis der World Locking Tools gewonnen haben. Kurz gesagt, teilt es dem System mit, dass die Kamerakorrektur nicht auf die Kamera angewendet werden soll, sondern auf andere Weise angewendet wird. In der Regel erfolgt dies über eine AlignSubtree
-Komponente, jedoch nicht zwingend.
Das zweite Kontrollkästchen für „No Pitch And Roll“ (Kein Nicken und Rollen) weist das System an, jegliches in der Transformation von Playspace
in Locked Space berechnetes Nicken und Rollen zu neutraliseren. (Weitere Informationen finden Sie in dieser Erläuterung der WLT-Koordinatenräume.) Dies wirkt sich nicht auf die vom SpacePin
-System angewendete Drehung aus, sondern nur auf die von der Frozen World Engine berechnete World Locking-Kamerakorrekturtransformation.
Anchor Management-Einstellungen
Die Anchor Management-Einstellungen enthalten die gesamte explizite Auswahl des Systems zur Ankernachverfolgung. Diese Auswahl wird derzeit nur beim Start durchgeführt und kann nach der Auswahl nicht mehr geändert werden.
Andere Einstellungen ermöglichen hier die Steuerung der Dichte des zugrunde liegenden internen Ankergraphen. Diese können jederzeit geändert werden, obwohl deren Auswirkung einige Zeit in Anspruch nehmen kann, bis sie über den internen Graphen verbreitet werden.
Bei der Abdeckung sehr großer Bereiche kann es sinnvoll sein, die Dichte des internen Ankergraphen zu Lasten der Genauigkeit der Leistung zu verringern. Durch Erhöhen von MinNewAnchorDistance wird genau dies erzielt. Durch Erhöhen des erforderlichen Mindestabstands vor dem Hinzufügen eines neuen internen Ankers nimmt der Abstand zwischen den Ankern zu und damit die Dichte der Anker ab.
Beachten Sie, dass maxAnchorEdgeLength zum Bestehen des Kantenerstellungstests größer sein muss als MinNewAnchorDistance. In der Praxis ist es ideal, wenn MaxAnchorEdgeLength 10-20 % größer ist als minNewAnchorDistance.
Der MaxLocalAnchors-Parameter schränkt die Anzahl der internen Anker direkt ein, anstatt die Dichte zu ändern. Wenn die Ankeranzahl den Grenzwert überschreitet, werden derzeit die Anker, die am weitesten von der Kamera entfernt sind, wiederverwendet, um die Anzahl zu verringern. Andere Algorithmen sind jedoch interessant und werden untersucht, sodass eine Anwendung nicht von dieser speziellen Implementierung abhängen sollte.
Weitere Informationen finden Sie in den Informationen zu AnchorSettings-Struktur.
Diagnoseeinstellungen
Die Diagnoseeinstellungen steuern die Sammlung von Diagnosen für die Analyse des Verhaltens und das Debuggen. Sie sollten normalerweise auf „Use Defaults“ (Standardwerte verwenden) festgelegt bleiben, wodurch unter anderem die Sammlung von Diagnosen deaktiviert wird. Die Diagnosesammlung ist ein erhebliches Leistungshindernis und sollte daher vermieden werden, sofern nicht erforderlich.
Wenn während der Entwicklung unerwartetes und unerwünschtes Verhalten auftritt, ermöglichen die durch Deaktivieren von Use Defaults und Aktivieren von DiagnosticsSettings.Enabled gesammelten Diagnosedaten die Sammlung von Daten, die hilfreich sein können, um dieses Verhalten zu verstehen und zu beheben.
Die Felder, die geändert werden können, werden in den Informationen zur DiagnosticsSettings-Klasse beschrieben.
Standardeinstellungen
Für jede Manager- als auch Diagnoseeinstellung ist ein Kontrollkästchen „Use Defaults“ verfügbar. Die Eigenschaft „Use Defaults“ ist auch über das Skript verfügbar.
Wenn die Eigenschaft „Use Defaults“ TRUE ist, werden die aktuellen Standardeinstellungen verwendet. Wenn sich die Standardwerte für eine Eigenschaft in einem neuen Release ändern, weist die Eigenschaft „Use Defaults“ das System an, den neuen Eigenschaftswert zu verwenden.
Wenn die Eigenschaft „Use Defaults“ auf TRUE festgelegt wird, werden stets alle Werte auf ihre aktuellen Standardwerte zurückgesetzt. Um die Werte bei einer Momentaufnahme zu einem bestimmten Zeitpunkt auf die Standardwerte einzuschränken, aktivieren Sie die Eigenschaft „Use Defaults“, um alle Felder auf die aktuellen Standardwerte zurückzusetzen, und löschen Sie dann das Kontrollkästchen, um zu verhindern, dass sie mit einem Update geändert werden.
Sie sollten die Festlegung TRUE für „Use Defaults“außer während der Entwicklung für Experimente und zum Debuggen beibehalten.