Persistente systemen voor ruimtelijke coördinaten

Over het algemeen zijn de voordelen van de persistentiemogelijkheden van World Locking Tools belangrijker dan de details van de implementatie.

Dit artikel begint daarom met een bespreking van de ervaringen die World Locking Tools persistentie mogelijk maakt. Daarna kijken we hoe de statuspersistentie van World Locking Tools kan worden beheerd. Vervolgens sluiten we af met een korte schets van welke gegevens worden opgeslagen en geladen.

World Locking Tools in verschillende sessies

Zoals elders gedefinieerd, is de bevroren status alle gegevens die nodig zijn om de huidige, wereldwijd vergrendelde stabiele ruimte te hervatten.

Het primaire nut van de persistentie van World Locking Tools is het toestaan van de voordelen van het werk van een voorbereidende sessie, het scannen van een gebied en het afstemmen van de virtuele ruimte op de echte wereld, voor gebruik in volgende sessies.

Herstel van deze status zorgt ervoor dat volgende sessies afzien van omslachtige of tijdrovende installatie en direct naar de focuservaring gaan.

Status van wereldvergrendelingshulpprogramma's opslaan

Voordat deze kan worden geladen, moet de bevroren status worden opgeslagen.

De eenvoudigste manier om de bevroren status op te slaan, is automatisch opslaan in te schakelen in World Locking Tools Manager, in de Unity-inspector in de context van World Locking Tools of tijdens runtime via script.

Het instellen van de status van World Locking Tools Manager via een script wordt uitgevoerd door eerst de status op te halen, deze op de gewenste manier te wijzigen en vervolgens de status weer in te stellen als een blok. Als u bijvoorbeeld de functie Automatisch opslaan wilt in- of uitschakelen:

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

Als de functie Automatisch opslaan tijdens een sessie van ingeschakeld naar uitgeschakeld gaat, worden er geen verdere periodieke opslagpogingen uitgevoerd. Als het van uitgeschakeld naar ingeschakeld gaat, worden periodieke opslagen gestart of hervat.

Met de functie Automatisch opslaan blijft de opgeslagen status up-to-date door de huidige status periodiek asynchroon op te slaan.

Als er meer controle nodig is over de timing van het opslaan van de status, kan Automatisch opslaan worden ingesteld op false en kan handmatig opslaan worden uitgevoerd via een script. De asynchrone opslag kan eenvoudig worden geactiveerd, zoals:

WorldLockingManager.GetInstance().Save();

Omdat het opslaan asynchroon is, worden andere pogingen om aan te roepen Save() terwijl een eerdere opslag nog bezig is, genegeerd.

Bevroren status laden

Nadat u een bevroren status hebt opgeslagen, kan het wenselijk zijn om World Locking Tools opnieuw in die status te laden, in een volgende sessie of zelfs later in dezelfde sessie.

Zoals we zien bij het opslaan van bevroren status, zijn er twee paden voor het laden van de status.

Als de vlag AutoLoad in World Locking Tools Manager is ingeschakeld, wordt elke eerder opgeslagen status tijdens het opstarten geladen. Als er geen opgeslagen status is om te laden, wordt er geen fout gegenereerd en wordt het opstarten uitgevoerd alsof de vlag niet is ingesteld.

Het instellen van de vlag AutoLoad van false naar true (bijvoorbeeld via script) tijdens runtime heeft geen effect. Het automatisch laden vindt plaats bij de eerste belasting of gebeurt helemaal niet.

Er kan echter op elk gewenst moment een load worden gestart vanuit een script via de load-functie van world locking tools manager:

WorldLockingManager.GetInstance().Load();

Net als bij Opslaan wordt het laden asynchroon uitgevoerd. Alle volgende aanroepen om te laden terwijl er nog een actief is, worden genegeerd.

Wat wordt er opgeslagen?

De gegevens die nodig zijn om de toewijzing van de World Locking Tools te reconstrueren, dat wil gezegd, de uitlijning van de virtuele wereld met de echte wereld, kunnen worden onderverdeeld in vier groepen.

  • Spatial Anchors: Het onderliggende netwerk van ruimtelijke ankers dat intern wordt gemaakt en onderhouden door World Locking Tools ' Anchor Manager levert de vereiste binding aan de echte wereld. Deze ankers blijven behouden via het onderliggende opslagmechanisme van het platform.

  • Enginestatus: de enginestatus blijft behouden, zodat de huidige toewijzing kan worden hervat. Als u deze status herstelt, verwijdert u dergelijke onbepaalde gegevens als de eerste houding van het hoofd in de vorige sessie(s).

  • Spatie vastmaken: als de toepassing verdere spatiespelden heeft toegepast om de uitlijning van modelleringscoördinaten met de echte wereld op een discrete set punten af te dwingen, blijft die toewijzing ook behouden.

  • Coördinaatruimte: World Locking Tools houdt de coördinaatruimte ten opzichte van de fysieke wereld vast door een interne grafiek van lokale ruimtelijke ankers op te slaan.

Wat wordt er niet opgeslagen?

Instellingen worden niet opgeslagen en World Locking Tools slaat geen afzonderlijke toepassingsobjecten op of herstelt deze niet. Alleen de status wordt opgeslagen. Eventuele configuratiewijzigingen door de toepassing, bijvoorbeeld wijzigingen die zijn aangebracht via de WorldLockingManager-API, worden telkens wanneer de toepassing wordt gestart, opnieuw ingesteld op de waarden die zijn ingesteld in Unity Inspector. Of, als ze niet zijn ingesteld in de Inspector, worden ze ingesteld op hun standaardwaarden in code.

Stel dat de toepassing de gebruiker de optie AutoSave World Locking-status wil geven en dat de voorkeur van de gebruiker gedurende sessies behouden blijft totdat deze wordt gewijzigd. Vervolgens moet de toepassing het volgende doen:

  1. Presenteer de gebruiker met UX voor het instellen van de voorkeur automatisch opslaan (waarschijnlijk met andere toepassingsinstellingen).
  2. De voorkeur van de gebruiker doorsturen naar WorldLockingManager.
  3. Noteer de voorkeur voor het bestand (waarschijnlijk met andere toepassingsinstellingen).
  4. Bij het opstarten van de toepassing laadt u de opgeslagen voorkeur (indien opgeslagen) en stuurt u deze door naar WorldLockingManager.

Zie opmerkingen in WorldLockingContext over timingproblemen bij het combineren van de statusinstelling tussen assets en script.

Zie ook