Impostazioni di contesto e gestione degli strumenti di blocco globale

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

Anche se 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 per tutta la durata dell'applicazione. Se non viene eseguita alcuna chiamata a WorldLockingManager, non verrà mai creata un'istanza. Una volta creata un'istanza, rimarrà attiva fino all'arresto dell'applicazione. Non viene mai distrutta e ricreata un'istanza.

WorldLockingManager non è un oggetto Unity, è una classe C# generica. Il relativo 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 che viene aggiunto a un oggetto nella scena nel modo consueto. I campi vengono visualizzati in Unity Inspector come qualsiasi altro campo normale del componente Unity.

Anche se non si tratta di un errore di avere più WorldLockingContexts attivi in una singola scena, probabilmente non è desiderato, perché il comportamento sarebbe indefinito, a seconda dell'ordine sconosciuto di caricamenti di oggetti.

Le impostazioni in un contesto vengono applicate quando viene caricato WorldLockingContext. In particolare, il contesto inserisce le impostazioni in World Locking Tools Manager nella chiamata OnEnable e ogni volta che la scena diventa 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 rimuovere e ricompilare le risorse per modificare le impostazioni, tale ricostruzione verrà eseguita immediatamente sulle impostazioni.

Anche se esistono 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 o disattivare 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).

Impostazioni precedenza

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 manterrà 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.

Prestare attenzione quando si combinano le impostazioni di World Locking Tools Manager dai contesti e dalle impostazioni degli script. Poiché il contesto applica sempre le impostazioni al caricamento, uno script applica manualmente l'impostazione durante il caricamento, in particolare dal callback OnEnable, probabilmente si verifica in condizioni di race condition e comportamento indeterminato.

Impostazioni disponibili

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

Configurazione di base del contesto di blocco globale

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 Manager Impostazioni . Sono incentrati sull'abilitazione o la disabilitazione di azioni periodiche automatizzate da parte del manager. È possibile eseguire manualmente qualsiasi azione automatica disabilitata.

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 globale.

Sezione di collegamento del contesto

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

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

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

Quando non vengono fornite le trasformazioni necessarie, lasciare null o tutti i contesti hanno "Usa esistente", il sistema genera un avviso e tenta di dedurre scelte valide. È consigliabile, ma non necessario, impostare in modo esplicito le trasformazioni appropriate, invece di indovinare il sistema.

Qui sono disponibili due opzioni aggiuntive che controllano la modalità di applicazione della correzione della trasformazione della fotocamera.

La prima casella di controllo, per "Applica regolazione", viene abilitata per impostazione predefinita. Questo indica al sistema di applicare la correzione calcolata della fotocamera a ogni fotogramma al "Frame di regolazione". GameObject La disabilitazione di questa è una funzionalità molto avanzata e deve essere tentata solo dopo la risoluzione di tutti gli altri problemi ed è stata ottenuta una conoscenza approfondita degli strumenti di blocco globale. In breve, indica al sistema che la correzione della fotocamera non deve essere applicata alla fotocamera, ma verrà applicata con 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 computato 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 globale calcolata dal motore Frozen World.

Impostazioni di gestione degli ancoraggi

Gestione ancoraggi imposta tutte le selezioni esplicite del sistema di rilevamento degli ancoraggi. Questa selezione è 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 il loro effetto può richiedere del tempo per propagarsi attraverso il grafico interno.

Quando si coprono aree molto grandi, è possibile ridurre la densità del grafico di ancoraggio interno per sacrificare l'accuratezza per le prestazioni. L'aumento di MinNewAnchorDistance esegue questa operazione. Aumentando la distanza minima richiesta 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 dei bordi, 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ù distanti 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 dell'ancoraggio del contesto

Altri dettagli sono la documentazione all'interno dello struct Anchor Impostazioni.

Impostazioni di diagnostica

Le impostazioni di diagnostica controllano la raccolta di diagnostica per l'analisi del comportamento e del debug. In genere devono essere lasciati con il set "Usa impostazioni predefinite", che, tra le altre cose, disabilita la raccolta di diagnostica. La raccolta di diagnostica è un ottimo 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 Usa impostazioni predefinite e abilitando Diagnostica Impostazioni. Abilitato consentirà la raccolta di dati che possono essere fondamentali nella comprensione e nella correzione di tale comportamento.

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

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 utilizzate 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 utilizzare 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à "Usa impostazioni predefinite" per reimpostare tutti i campi nelle impostazioni predefinite correnti, quindi annullare l'impostazione della casella di controllo per impedirne la modifica con un aggiornamento.

È consigliabile lasciare impostato "Usa valori predefiniti" su true, tranne durante lo sviluppo per la sperimentazione e il debug.

Vedi anche