Rendere persistenti i sistemi di coordinate spaziali

In generale, i vantaggi delle funzionalità di persistenza di World Locking Tools sono di maggiore interesse rispetto ai dettagli dell'implementazione.

Questo articolo inizierà quindi con una discussione sulle esperienze abilitate da World Locking Tools. Dopo di che si esaminerà il modo in cui la persistenza dello stato degli strumenti di blocco mondiale può essere gestita. Si chiuderà quindi con un breve schizzo di quali dati vengono salvati e caricati.

Strumenti di blocco mondiale tra sessioni

Come definito altrove, lo stato congelato è tutti i dati necessari per riprendere lo spazio stabile bloccato al mondo corrente.

L'utilità primaria della persistenza di World Locking Tools consente di sfruttare i vantaggi del lavoro di una sessione preliminare, l'analisi di un'area e l'allineamento dello spazio virtuale al mondo reale, da usare nelle sessioni successive.

Il ripristino di questo stato consente alle sessioni successive di rinunciare alla configurazione noiosa o dispendiosa del tempo e ottenere direttamente l'esperienza focale.

Salvataggio dello stato degli strumenti di blocco mondiale

Prima di poter essere caricato, è necessario salvare lo stato congelato.

Il modo più semplice per salvare lo stato congelato consiste nell'abilitare AutoSave in World Locking Tools Manager, nel controllo Unity nel contesto degli strumenti di blocco mondiale o in fase di esecuzione tramite script.

L'impostazione dello stato di World Locking Tools Manager tramite script viene eseguita prima ottenendo lo stato, modificandolo in qualsiasi modo desiderato e quindi impostando lo stato come blocco. Ad esempio, per attivare la funzionalità AutoSave:

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

Se la funzionalità AutoSave passa da abilitata a disabilitata durante una sessione, non verrà eseguito alcun ulteriore salvataggio periodico. Se passa da disabilitato a abilitato, il salvataggio periodico verrà avviato o ripreso.

La funzionalità AutoSave mantiene uno stato salvato aggiornato salvando periodicamente lo stato corrente in modo asincrono.

Se è necessario un maggiore controllo sulla tempistica del salvataggio dello stato, l'applicazione automatica può essere impostata su false e il salvataggio manuale può essere eseguito tramite script. Il salvataggio asincrono viene attivato facilmente, come segue:

WorldLockingManager.GetInstance().Save();

Poiché il salvataggio è asincrono, altri tentativi di richiamare Save() mentre un salvataggio precedente è ancora in corso verrà ignorato.

Caricamento dello stato bloccato

Dopo aver salvato uno stato congelato, potrebbe essere consigliabile ricaricare gli strumenti di blocco mondiale in tale stato, in una sessione successiva o anche più tardi nella stessa sessione.

Come si trova con il salvataggio dello stato Frozen, sono disponibili due percorsi per lo stato di caricamento.

Se il flag di caricamento automatico in World Locking Tools Manager è abilitato, qualsiasi stato salvato precedente verrà caricato al momento dell'avvio. Se non è stato salvato per il caricamento, non viene generato alcun errore e l'avvio procede come se il flag non fosse impostato.

L'impostazione del flag di caricamento automatico da false a true (ad esempio tramite script) in fase di esecuzione non avrà alcun effetto. Il caricamento automatico avviene al carico iniziale o non si verifica affatto.

Tuttavia, un carico può essere avviato dallo script in qualsiasi momento tramite la funzione Load di World Locking Tools Manager:

WorldLockingManager.GetInstance().Load();

Come con salva, il carico viene eseguito in modo asincrono. Tutte le chiamate successive al caricamento mentre una è ancora in corso verrà ignorata.

Cosa viene salvato?

I dati necessari per ricostruire il mapping degli strumenti di blocco mondiale, ovvero l'allineamento del mondo virtuale al mondo reale, può essere suddiviso in quattro gruppi.

  • Ancoraggi spaziali: la rete sottostante di ancoraggi spaziali creati e gestiti internamente da World Locking Tools' Anchor Manager fornisce il requisito di associazione al mondo reale. Tali ancoraggi vengono mantenuti tramite il meccanismo di archiviazione sottostante della piattaforma.

  • Stato motore: lo stato del motore è persistente per consentire al motore di riprendere il mapping corrente. Il ripristino di questo stato rimuove tali indeterminaci come la posizione iniziale della testa nelle sessioni precedenti.

  • Aggiunta dello spazio: se l'applicazione ha applicato altri pin di spazio per forzare l'allineamento delle coordinate di modellazione al mondo reale in un set discreto di punti, tale mapping viene mantenuto anche.

  • Spazio di coordinate: Gli strumenti di blocco mondiale persistono lo spazio di coordinate relativo al mondo fisico salvando un grafico interno di ancoraggi spaziali locali.

Cosa non viene salvato?

Le impostazioni non vengono salvate e Gli strumenti di blocco mondiale non salvano o ripristinano singoli oggetti applicazione. Viene salvato solo lo stato. Tutte le modifiche di configurazione apportate dall'applicazione, ad esempio, apportate tramite l'API WorldLockingManager vengono reimpostate nei valori impostati in Unity Inspector ogni volta che l'applicazione viene avviata. In alternativa, se non sono impostati nel controllo, vengono impostati sui valori predefiniti nel codice.

Si supponga, ad esempio, che l'applicazione voglia presentare l'utente con l'opzione AutoSave World Locking state e che la preferenza dell'utente sia persistente nelle sessioni fino a quando non viene modificata. L'applicazione deve quindi:

  1. Presentare l'utente con l'esperienza utente per impostare la preferenza AutoSave (presumibilmente con altre impostazioni dell'applicazione).
  2. Inoltrare la preferenza dell'utente a WorldLockingManager.
  3. Registrare la preferenza per il file (presumibilmente con altre impostazioni dell'applicazione).
  4. All'avvio dell'applicazione caricare le preferenze salvate (se salvate) e inoltrare a WorldLockingManager.

Vedere le note in WorldLockingContext relative ai problemi di intervallo durante la combinazione di impostazioni dello stato tra asset e script.

Vedi anche