Share via


保存空間座標系統

一般而言,世界鎖定工具持續性功能的優點比實作的詳細數據更感興趣。

因此,本文將討論世界鎖定工具持續性所啟用的體驗。 之後,我們將探討如何管理世界鎖定工具狀態持續性。 接著,我們將使用儲存和載入數據的簡短草圖來關閉。

跨會話的世界鎖定工具

如其他地方所定義,凍結狀態是恢復目前世界鎖定穩定空間所需的所有數據。

世界鎖定工具持續性的主要公用程式是允許初步會話工作的優點,掃描區域並將虛擬空間對齊真實世界,以供後續會話使用。

還原此狀態可讓後續會話放棄繁瑣或耗時的設定,並直接進入焦點體驗。

儲存世界鎖定工具狀態

必須先儲存凍結狀態,才能載入凍結狀態。

儲存凍結狀態的最直接方式,是在世界鎖定工具內容的 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 中所設定。 或者,如果未在偵測器中設定它們,則會在程式代碼中設定為預設值。

例如,假設應用程式想要向使用者顯示自動儲存世界鎖定狀態的選項,並讓使用者的喜好設定在會話之間持續存在,直到變更為止。 然後應用程式必須:

  1. 向用戶呈現UX來設定自動儲存喜好設定(大概與其他應用程式設定一起)。
  2. 將使用者的喜好設定轉寄至 WorldLockingManager。
  3. 記錄檔案的喜好設定(大概與其他應用程式設定一起)。
  4. 在應用程式啟動時,載入已儲存的喜好設定(如果有已儲存),並轉送至 WorldLockingManager。

請參閱 WorldLockingContext 中的注意事項,以了解在資產與腳本之間混合狀態設定時的時機問題。

另請參閱