Bevara rumsliga koordinatsystem
I allmänhet är fördelarna med beständighetsfunktionerna i World Locking Tools mer intressanta än detaljerna i deras implementering.
Den här artikeln börjar därför med en diskussion om de upplevelser som beständigheten i World Locking Tools möjliggör. Därefter ska vi titta på hur Tillståndsbeständighet för World Locking Tools kan hanteras. Vi avslutar sedan med en kort skiss av vilka data som sparas och läses in.
World Locking Tools mellan sessioner
Enligt definitionen någon annanstans är Frozen State alla data som krävs för att återuppta det aktuella världslåst stabila utrymmet.
Det främsta verktyget för World Locking Tools beständighet är att tillåta fördelarna med en preliminär sessions arbete, genomsöka ett område och justera virtuellt utrymme till den verkliga världen, som ska användas i efterföljande sessioner.
Återställning av det här tillståndet gör att efterföljande sessioner kan avstå från omständlig eller tidskrävande installation och komma direkt till brännpunkten.
Spara tillstånd för låsningsverktyg i världen
Innan den kan läsas in måste det låsta tillståndet sparas.
Det enklaste sättet att spara det frusna tillståndet är att aktivera Spara automatiskt i World Locking Tools Manager, antingen i Unity-inspektören i kontexten för World Locking Tools eller vid körning via skript.
Att ange tillståndet För hanteraren för World Locking Tools via skript utförs genom att först hämta tillståndet, ändra det på önskat sätt och sedan ange tillståndet som ett block igen. Om du till exempel vill växla funktionen Spara automatiskt:
var settings = WorldLockingManger.GetInstance().Settings;
settings.AutoSave = !settings.AutoSave;
WorldLockingManager.GetInstance().Settings = settings;
Om funktionen Spara automatiskt går från aktiverad till inaktiverad under en session görs inga ytterligare periodiska besparingar. Om den går från inaktiverad till aktiverad påbörjas eller återupptas periodiska sparanden.
Funktionen Spara automatiskt behåller ett uppdaterat sparat tillstånd genom att regelbundet spara det aktuella tillståndet asynkront.
Om du behöver mer kontroll över tidpunkten för att spara tillstånd kan autospara anges till false, och manuell besparing kan göras via skript. Den asynkrona räddningen utlöses enkelt, som:
WorldLockingManager.GetInstance().Save();
Eftersom spara är asynkront ignoreras andra försök att anropa Save()
medan en tidigare sparande fortfarande pågår.
Läser in fruset tillstånd
Efter att ha sparat ett fruset tillstånd kan det vara önskvärt att läsa in World Locking Tools i det tillståndet igen, antingen i en efterföljande session eller till och med senare i samma session.
Som vi ser när vi sparar fryst tillstånd finns det två sökvägar för inläsningstillstånd.
Om autoinläsningsflaggan i World Locking Tools Manager är aktiverad läses alla tidigare sparade tillstånd in vid starttillfället. Om det inte finns något sparat tillstånd att läsa in genereras inget fel och start fortsätter som om flaggan inte hade angetts.
Om du ställer in autoload-flaggan från false till true (till exempel via skript) vid körningen har det ingen effekt. Autoinläsningen sker antingen vid den första inläsningen eller så sker den inte alls.
En belastning kan dock initieras från skriptet när som helst via World Locking Tools Manager-funktionen Load:
WorldLockingManager.GetInstance().Load();
Precis som med Spara utförs belastningen asynkront. Efterföljande anrop till Load medan en fortfarande pågår ignoreras.
Vad sparas?
De data som krävs för att rekonstruera World Locking Tools-mappningen – det vill: anpassningen av den virtuella världen till den verkliga världen – kan delas in i fyra grupper.
Spatial Anchors: Det underliggande nätverket av rumsliga fästpunkter som skapats och underhålls internt av World Locking Tools Anchor Manager tillhandahåller den nödvändiga bindningen till den verkliga världen. Dessa fästpunkter sparas via plattformens underliggande lagringsmekanism.
Motortillstånd: Motortillståndet sparas så att motorn kan återuppta sin aktuella mappning. Om du återställer det här tillståndet tar du bort sådana obestämdheter som huvudets initiala pose i föregående session(ar).
Fäst utrymme: Om programmet har tillämpat ytterligare blankstegsstift för att framtvinga justering av modelleringskoordinater till den verkliga världen vid en diskret uppsättning punkter sparas även mappningen.
Koordinatutrymme: World Locking Tools bevarar koordinatutrymmet i förhållande till den fysiska världen genom att spara en intern graf över lokala rumsliga fästpunkter.
Vad sparas inte?
Inställningar sparas inte och World Locking Tools sparar eller återställer inte enskilda programobjekt. Endast tillstånd sparas. Alla konfigurationsändringar av programmet, till exempel ändringar som görs via API:et WorldLockingManager, återställs till sina värden enligt vad som anges i Unity Inspector varje gång programmet startas. Om de inte har angetts i inspektören är de inställda på sina standardvärden i kod.
Anta till exempel att programmet vill ge användaren alternativet AutoSpara world locking-tillstånd och låta användarens inställning bevaras mellan sessioner tills den ändras. Sedan måste programmet:
- Presentera användaren med UX för att ange inställningar för spara automatiskt (förmodligen med andra programinställningar).
- Vidarebefordra användarens inställning till WorldLockingManager.
- Registrera filinställningen (förmodligen med andra programinställningar).
- Vid programstart läser du in den sparade inställningen (om någon har sparats) och vidarebefordrar till WorldLockingManager.
Se anteckningar i WorldLockingContext om tidsbestämningsproblem vid blandning av tillståndsinställningar mellan tillgångar och skript.