Freigeben über


Persistieren räumlicher Koordinatensysteme

Im Allgemeinen sind die Vorteile der Persistenzfunktionen von World Locking Tools von höherem Interesse als die Details ihrer Implementierung.

Dieser Artikel beginnt daher mit einer Erörterung der Erfahrungen, die die Persistenz von World Locking Tools ermöglicht. Danach sehen wir uns an, wie die Zustandspersistenz von World Locking Tools verwaltet werden kann. Anschließend schließen wir mit einer kurzen Übersicht darüber, welche Daten gespeichert und geladen werden.

Sitzungsübergreifende World Locking Tools

Wie an anderer Stelle definiert, umfasst der fixierte Zustand alle Daten, die erforderlich sind, um den aktuellen, stabilen weltgebundenen Raum fortzusetzen.

Das wichtigste Hilfsmittel der Persistenz von World Locking Tools ist die Möglichkeit, die Vorteile der Arbeit einer vorbereitenden Sitzung zuzulassen, einen Bereich zu überprüfen und virtuellen Raum zur Verwendung in nachfolgenden Sitzungen an der realen Welt auszurichten.

Die Wiederherstellung dieses Zustands ermöglicht nachfolgenden Sitzungen, mühsame oder zeitaufwändige Einrichtungen zu vermeiden und direkt zur zentralen Erfahrung zu gelangen.

Speichern des World Locking Tools-Zustands

Bevor der fixierte Zustand geladen werden kann, muss er gespeichert werden.

Die unkomplizierteste Möglichkeit zum Speichern des fixierten Zustands ist die Aktivierung von AutoSave im World Locking Tools Manager, entweder im Unity Inspector im World Locking Tools-Kontext oder zur Runtime per Skript.

Das Festlegen des Zustands des World Locking Tools Managers über ein Skript erfolgt, indem der Zustand zuerst abgerufen, auf beliebige Weise geändert und dann als Block zurückgesetzt wird. So können Sie z. B. das Feature AutoSave umschalten:

var settings = WorldLockingManger.GetInstance().Settings;
settings.AutoSave = !settings.AutoSave;
WorldLockingManager.GetInstance().Settings = settings;

Wenn das AutoSave-Feature während einer Sitzung von „aktiviert“ zu „deaktiviert“ wechselt, werden keine weiteren periodischen Speicherungen versucht. Wenn es von „deaktiviert“ zu „aktiviert“ wechselt, werden regelmäßige Speicherungen gestartet oder fortgesetzt.

Das AutoSave-Feature hält einen aktuellen gespeicherten Zustand bei, indem der aktuelle Zustand in regelmäßigen Abständen asynchron gespeichert wird.

Wenn mehr Kontrolle über den Zeitpunkt der Speicherung des Zustands erforderlich ist, wird AutoSave möglicherweise auf FALSE festgelegt, und das manuelle Speichern kann über ein Skript erfolgen. Das asynchrone Speicher lässt sich wie hier einfach auslösen:

WorldLockingManager.GetInstance().Save();

Da das Speichern asynchron ist, werden andere Versuche zum Aufruf von Save() ignoriert, während eine vorherige Speicherung noch ausgeführt wird.

Laden des fixierten Zustands

Nach dem Speichern eines fixierten Zustands kann es wünschenswert sein, World Locking Tools in diesem Zustand erneut zu laden, entweder in einer nachfolgenden Sitzung oder sogar später in derselben Sitzung.

Wie wir beim Speichern des fixierten Zustands feststellen, gibt es zwei Pfade zum Laden des Zustands.

Wenn das AutoLoad-Flag im World Locking Tools Manager aktiviert ist, werden alle vorherigen gespeicherten Status beim Start geladen. Wenn kein gespeicherter Zustand zum Laden vorliegt, wird kein Fehler generiert, und der Startvorgang wird fortgesetzt, als ob das Flag nicht gesetzt worden wäre.

Das Festlegen des AutoLoad-Flags von FALSE auf TRUE (z. B. per Skript) zur Runtime hat keine Auswirkungen. Das automatische Laden erfolgt entweder beim ersten Laden oder gar nicht.

Ein Laden kann jedoch jederzeit vom Skript aus über die Load-Funktion des World Locking Tools Managers initiiert werden:

WorldLockingManager.GetInstance().Load();

Wie das Speichern wird der Ladevorgang asynchron ausgeführt. Alle nachfolgenden Aufrufe von Load, während ein Aufruf noch ausgeführt wird, werden ignoriert.

Was wird gespeichert?

Die Daten, die zum Rekonstruieren der Zuordnung der World Locking Tools erforderlich sind, d. h. die Ausrichtung der virtuellen Welt an der realen Welt, können in vier Gruppen unterteilt werden.

  • Spatial Anchors: Das zugrunde liegende Netzwerk von Raumankern, die intern vom Anker-Manager der World Locking Tools erstellt und verwaltet werden, stellt die erforderliche Bindung an die reale Welt zur Verfügung. Diese Anker werden über den zugrunde liegenden Speichermechanismus der Plattform persistiert.

  • Engine-Status: Der Engine-Status wird persistiert, damit die Engine ihre aktuelle Zuordnung fortsetzen kann. Durch das Wiederherstellen dieses Zustands werden solche Unbestimmtheiten wie die Anfangsposition des Kopfs in den vorherigen Sitzungen entfernt.

  • Space Pinning: Wenn die Anwendung weitere Space Pins angewendet hat, um die Ausrichtung der Modellierungskoordinaten an der realen Welt an einem diskreten Satz von Punkten zu erzwingen, wird diese Zuordnung ebenfalls persistiert.

  • Koordinatenraum: World Locking Tools speichert den Koordinatenraum relativ zur physischen Welt, indem ein interner Graph lokaler Raumanker gespeichert wird.

Was wird nicht gespeichert?

Einstellungen werden nicht gespeichert, und World Locking Tools speichert weder einzelne Anwendungsobjekte, noch stellt es sie wieder her. Nur der Zustand wird gespeichert. Alle Konfigurationsänderungen durch die Anwendung, z. B. Änderungen, die über die WorldLockingManager-API vorgenommen werden, werden bei jedem Start der Anwendung auf ihre Werte zurückgesetzt, die im Unity Inspector festgelegt sind. Wenn sie nicht im Inspector festgelegt sind, werden sie auf ihre Standardwerte im Code festgelegt.

Beispiel: Die Anwendung möchte dem Benutzer die Option „AutoSave World Locking“ zum automatischen Speichern des Zustands präsentieren und die Einstellung des Benutzers sitzungsübergreifend persistieren, bis sie geändert wird. Dann muss die Anwendung:

  1. Dem Benutzer die Benutzeroberfläche zum Festlegen der Einstellung AutoSave (vermutlich mit anderen Anwendungseinstellungen) präsentieren.
  2. Die Einstellung des Benutzers an den WorldLockingManager weiterleiten.
  3. Die Einstellung für die Datei aufzeichnen (vermutlich mit anderen Anwendungseinstellungen).
  4. Beim Anwendungsstart die gespeicherte Einstellung (sofern gespeichert) laden und an WorldLockingManager weiterleiten.

Hinweise zu Zeitsteuerungsproblemen beim Mischen von Zustandseinstellungen zwischen Assets und Skripts finden Sie in WorldLockingContext.

Weitere Informationen