保存空間座標系統
一般而言,世界鎖定工具持續性功能的優點比實作的詳細數據更感興趣。
因此,本文將討論世界鎖定工具持續性所啟用的體驗。 之後,我們將探討如何管理世界鎖定工具狀態持續性。 接著,我們將使用儲存和載入數據的簡短草圖來關閉。
跨會話的世界鎖定工具
如其他地方所定義,凍結狀態是恢復目前世界鎖定穩定空間所需的所有數據。
世界鎖定工具持續性的主要公用程式是允許初步會話工作的優點,掃描區域並將虛擬空間對齊真實世界,以供後續會話使用。
還原此狀態可讓後續會話放棄繁瑣或耗時的設定,並直接進入焦點體驗。
儲存世界鎖定工具狀態
必須先儲存凍結狀態,才能載入凍結狀態。
儲存凍結狀態的最直接方式,是在世界鎖定工具內容的 Unity 偵測器中,或透過腳本在運行時間啟用自動儲存。
透過腳本設定世界鎖定工具管理員狀態,會先取得狀態、以任何想要的方式變更狀態,然後將狀態設定回區塊。 例如,若要切換自動儲存功能:
var settings = WorldLockingManger.GetInstance().Settings;
settings.AutoSave = !settings.AutoSave;
WorldLockingManager.GetInstance().Settings = settings;
如果自動儲存功能從啟用到會話期間停用,將不會嘗試進一步定期儲存。 如果它從停用到啟用,就會開始或繼續定期儲存。
自動儲存功能會定期以異步方式儲存目前狀態,以保留最新儲存的狀態。
如果需要更多控制儲存狀態的時間,則自動儲存可能會設定為 false,而且可以透過腳本手動儲存。 異步儲存很容易觸發,如下所示:
WorldLockingManager.GetInstance().Save();
由於儲存是異步的,因此在先前的儲存仍在進行中時,其他嘗試 Save()
叫用將會被忽略。
載入凍結狀態
儲存了凍結狀態之後,可能會想要將世界鎖定工具重載回該狀態,不論是在後續會話中,還是在相同會話的稍後。
我們發現儲存凍結狀態時,載入狀態有兩個路徑。
如果 [世界鎖定工具管理員] 上的 [自動載入] 旗標已啟用,則會在啟動時載入任何先前儲存的狀態。 如果沒有要載入的已儲存狀態,則不會產生任何錯誤,而且啟動會繼續,就像未設定旗標一樣。
在運行時間將 AutoLoad 旗標從 false 設定為 true(例如,透過腳本),將沒有任何作用。 自動載入會在初始載入時發生,或完全不會發生。
不過,您可以隨時透過世界鎖定工具管理員的Load函式,從腳本起始載入:
WorldLockingManager.GetInstance().Load();
就像使用Save一樣,載入會以異步方式執行。 當一個仍在進行中時,任何後續對 Load 的呼叫都會被忽略。
儲存的內容為何?
重建世界鎖定工具對應所需的數據,也就是虛擬世界的對齊方式,可以分成四個群組。
空間錨點:由世界鎖定工具的 錨點管理員 在內部建立和維護的空間錨點基礎網路,提供對真實世界的必要系結。 這些錨點會透過平臺的基礎儲存機制來保存。
引擎狀態:引擎狀態會保存,以允許引擎繼續其目前的對應。 還原此狀態會移除前一個會話中頭部的初始姿勢這類不確定。
空間釘選:如果應用程式已套用任何進一步的空間釘選,以強制將模型座標對齊至真實世界,該對應也會保存。
坐標空間:世界鎖定工具會藉由儲存本機空間錨點的內部圖形,來保存相對於實體世界的座標空間。
未儲存什麼?
設定 不會儲存,而且世界鎖定工具不會儲存或還原個別的應用程式物件。 只會儲存狀態。 應用程式所做的任何組態變更,例如,透過 WorldLockingManager API 所做的變更,會在每次啟動應用程式時,重設為其值,如 Unity Inspector 中所設定。 或者,如果未在偵測器中設定它們,則會在程式代碼中設定為預設值。
例如,假設應用程式想要向使用者顯示自動儲存世界鎖定狀態的選項,並讓使用者的喜好設定在會話之間持續存在,直到變更為止。 然後應用程式必須:
- 向用戶呈現UX來設定自動儲存喜好設定(大概與其他應用程式設定一起)。
- 將使用者的喜好設定轉寄至 WorldLockingManager。
- 記錄檔案的喜好設定(大概與其他應用程式設定一起)。
- 在應用程式啟動時,載入已儲存的喜好設定(如果有已儲存),並轉送至 WorldLockingManager。
請參閱 WorldLockingContext 中的注意事項,以了解在資產與腳本之間混合狀態設定時的時機問題。