Impostazioni di contesto e gestione degli strumenti di blocco mondiale

Il contesto degli strumenti di blocco mondiale consente la personalizzazione parametrica di World Locking Tools Manager in Unity Inspector.

Mentre il componente WorldLockingContext presenta un'interfaccia utente per WorldLockingManager, è importante comprendere che non sono la stessa cosa e in alcune situazioni può essere importante comprendere la relazione.

Manager è un singleton

WorldLockingManager è un singleton creato su richiesta e persistente durante la durata dell'applicazione. Se non vengono effettuate chiamate a WorldLockingManager, non verrà mai creata un'istanza. Una volta creata un'istanza, rimarrà attiva finché l'applicazione non viene arrestata. Non viene mai distrutto e ricreato un'istanza.

WorldLockingManager non è un oggetto Unity, è una classe C# generica. L'aggiornamento è basato su un componente Unity proxy, un'istanza della classe WorldLockingManager.UpdateProxy privata. In caso contrario, è indipendente dai cicli di creazione/aggiornamento/distruzione di Unity.

Il contesto è un componente Unity

WorldLockingContext è un componente Unity aggiunto a un oggetto nella scena in modo consueto. I campi vengono visualizzati nel controllo Unity come qualsiasi altro campo del componente Unity regolare.

Anche se non è un errore per avere più worldlockingContext attivi in una singola scena, probabilmente non è desiderato, poiché il comportamento non sarebbe definito, dipendente dall'ordine sconosciuto di caricamento dell'oggetto.

Le impostazioni di un contesto vengono applicate quando viene caricato WorldLockingContext. In particolare, il contesto esegue il push delle impostazioni nella gestione degli strumenti di blocco mondiale nella chiamata OnEnable e ogni volta che la scena diventa la scena attiva. Quest'ultimo viene applicato come parte del callback Unity.SceneManager.activeSceneChanged, se e solo se la nuova scena attiva è la scena a cui appartiene il contesto.

Tutte le impostazioni possono essere applicate dallo script

In qualsiasi momento nel runtime, l'applicazione può applicare impostazioni personalizzate a WorldLockingManager tramite script. Se è necessario eliminare e ricompilare le risorse per apportare una modifica nelle impostazioni, tale ricostruzione verrà eseguita immediatamente sulla modifica delle impostazioni.

Sebbene siano presenti alcuni membri pratici per ottenere singoli valori di proprietà da WorldLockingManager, ad esempio AutoSave, l'impostazione dei parametri avviene sempre in aggregazione. Ad esempio, il codice per attivare le funzionalità AutoMerge e AutoRefreeze potrebbe essere simile al seguente:

/// 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;

Analogamente per le impostazioni di diagnostica.

Si noti che la modifica di più impostazioni contemporaneamente in questo modo comporta solo il costo di una singola ricompilazione (se necessario).

Precedenza delle impostazioni

Le regole per le impostazioni attualmente applicate a WorldLockingManager sono molto semplici:

  1. Se non è stata caricata alcuna scena contenente un contesto e non sono state impostate impostazioni in modo esplicito dallo script, WorldLockingManager ha impostazioni predefinite.

  2. Un'impostazione mantiene il valore fino a quando non viene sottoposto a override da un caricamento WorldLockingContext con una scena o da una modifica esplicita richiamata dall'applicazione nello script.

Attenzione deve essere usata quando si combinano le impostazioni di Gestione strumenti di blocco mondiale da contesti e impostazioni dagli script. Poiché il contesto applica sempre le impostazioni sul carico, uno script che applica manualmente l'impostazione durante il carico, in particolare dal callback OnEnable, probabilmente verrà eseguito in condizioni di gara e comportamento indeterminato.

Impostazioni disponibili

Le impostazioni disponibili per il controllo del comportamento degli strumenti di blocco mondiale vengono suddivise in gruppi come indicato di seguito.

Configurazione del contesto di blocco mondiale di base

Impostazioni di automazione

Le impostazioni di automazione controllano il comportamento di runtime di World Locking Tools Manager. I campi disponibili per la modifica e le relative implicazioni sono documentati all'interno della classe ManagerSettings . Sono incentrati sull'abilitazione o la disabilitazione di azioni periodiche automatiche da parte del manager. Qualsiasi azione automatizzata disabilitata può essere eseguita manualmente.

Sezione di automazione del contesto

Impostazioni di collegamento

Le impostazioni di collegamento vengono usate per definire in modo esplicito la scena GameObjects le cui trasformazioni verranno usate per applicare le correzioni degli strumenti di blocco mondiale.

Sezione collegamento del contesto

Il campo "Usa esistente" consente di impostare gli oggetti collegati una volta nella scena con il rig della fotocamera (con "Usa esistente" false) e non sottoposto a override caricando le scene di contenuto successive (con "Usa esistente" true).

Al contrario, l'impostazione "Usa esistente" su false consente a più scene ognuna con un rig di fotocamera diversa di associare alle posizioni appropriate nella gerarchia della fotocamera.

Quando si crea e gestisce la gerarchia della fotocamera dallo script, il campo "Usa esistente" deve essere impostato su true su tutti i contesti e i collegamenti aggiornati in modo esplicito dagli script di gestione della fotocamera.

Quando le trasformazioni necessarie non vengono fornite, a sinistra null o tutti i contesti sono "Usa esistente", quindi il sistema genera un avviso e tenta di dedurre scelte valide. È consigliabile, ma non obbligatorio, impostare in modo esplicito le trasformazioni appropriate, anziché avere il sistema indovinare.

Esistono due opzioni aggiuntive qui che controllano il modo in cui verrà applicata la correzione della trasformazione della fotocamera.

La prima casella di controllo per "Applica regolazione", impostazione predefinita abilitata. Questo indica al sistema di applicare la correzione della fotocamera calcolata a ogni fotogramma alla "Cornice di regolazione" GameObject. La disabilitazione di questa è una funzionalità molto avanzata e deve essere provato solo dopo che tutti gli altri problemi sono stati risolti e una conoscenza approfondita degli strumenti di blocco mondiale è stata raggiunta. In breve, indica al sistema che la correzione della fotocamera non deve essere applicata alla fotocamera, ma verrà applicata da altri mezzi. In genere, si tratta di un AlignSubtree componente, ma non deve essere.

La seconda casella di controllo, per "No Pitch And Roll", indica al sistema di zero qualsiasi passo e roll calcolata nella trasformazione da Playspace a Spazio bloccato. Vedere questa discussione sugli spazi di coordinate WLT. Questo non ha alcun effetto sulla rotazione applicata dal SpacePin sistema, ma influisce solo sulla trasformazione di correzione della fotocamera di blocco mondiale calcolata dal motore Frozen World.

Impostazioni di gestione ancoraggio

Gestione ancoraggi impostazioni tutte le selezioni esplicite del sistema di rilevamento ancoraggio. Questa selezione viene attualmente eseguita solo all'avvio e una volta selezionata non può essere modificata.

Altre impostazioni consentono di controllare la densità del grafico di ancoraggio interno sottostante. Questi possono essere modificati in qualsiasi momento, anche se l'effetto potrebbe richiedere qualche tempo per propagare attraverso il grafico interno.

Quando si coprono aree molto grandi, si potrebbe voler ridurre la densità del grafico di ancoraggio interno per sacrificare l'accuratezza per le prestazioni. L'aumento di MinNewAnchorDistance fa solo questo. Aumentando la distanza minima necessaria prima di aggiungere un nuovo ancoraggio interno, la spaziatura tra gli ancoraggi aumenta e quindi la densità degli ancoraggi diminuisce.

Si noti che per superare il test di creazione perimetrale, maxAnchorEdgeLength deve essere maggiore di MinNewAnchorDistance. In pratica, un MaxAnchorEdgeLength 10-20% maggiore, quindi minNewAnchorDistance funziona bene.

Il parametro MaxLocalAnchors, anziché modificare la densità, limita direttamente il numero di ancoraggi interni. Attualmente, quando il numero di ancoraggi supera il limite, gli ancoraggi più lontani dalla fotocamera vengono riciclati per ridurre il numero. Tuttavia, altri algoritmi sono interessanti e in fase di analisi, quindi un'applicazione non deve dipendere da questa particolare implementazione.

Sezione di gestione ancoraggio del contesto

Altri dettagli sono documentati nello struct AnchorSettings .

Impostazioni di diagnostica

Le impostazioni di diagnostica controllano la raccolta di diagnostica per l'analisi del comportamento e del debug. Normalmente devono essere lasciati con il set "Use Defaults", che, tra le altre cose, disabilita la raccolta di diagnostica. La raccolta di diagnostica è una grande trascinamento delle prestazioni, quindi deve essere evitata a meno che non sia necessario.

Sezione diagnostica del contesto

Durante lo sviluppo, quando si verifica un comportamento imprevisto e indesiderato, i dati di diagnostica raccolti disabilitando Use Defaults e abilitando DiagnosticsSettings.Enabled consentiranno la raccolta di dati che possono essere strumentali per comprendere e correggere tale comportamento.

I campi disponibili per la modifica sono descritti all'interno della classe DiagnosticsSettings .

Impostazioni predefinite

Entrambe le impostazioni di gestione e diagnostica contengono una casella di controllo "Usa impostazioni predefinite" nelle impostazioni. La proprietà "Use Defaults" è disponibile anche dallo script.

Quando la proprietà "Use Defaults" è true, vengono usate le impostazioni predefinite correnti. Se i valori predefiniti per una modifica della proprietà in una nuova versione, la proprietà "Use Defaults" indica al sistema di usare il nuovo valore della proprietà.

Se si imposta la proprietà "Use Defaults" su true in qualsiasi momento, tutti i valori verranno reimpostati sui valori predefiniti correnti . Per bloccare i valori in uno snapshot dei valori predefiniti in un determinato momento, abilitare la proprietà "Use Defaults" per reimpostare tutti i campi alle impostazioni predefinite correnti, quindi annullare la casella di controllo per impedire la modifica con un aggiornamento.

È consigliabile lasciare il valore "Use Defaults" impostato su true, tranne durante lo sviluppo per la sperimentazione e il debug.

Vedi anche