共用方式為


世界鎖定工具內容和管理員設定

世界 鎖定工具內容 允許在 Unity 偵測器中自定義 世界鎖定工具管理員 的參數化。

雖然 WorldLockingContext 元件提供 WorldLockingManager 的 UI,但請務必瞭解它們不相同,在某些情況下,瞭解其關聯性可能很重要。

經理是單一

WorldLockingManager 是依需求建立的單一實例,並持續到應用程式的存留期。 如果未呼叫 WorldLockingManager,則永遠不會具現化。 具現化后,它會保持實時狀態,直到應用程式關閉為止。 它永遠不會被摧毀並重新具現化。

WorldLockingManager 不是 Unity 物件,它是泛型 C# 類別。 其 Update 是由 Proxy Unity 元件所驅動,這是私人 WorldLockingManager.UpdateProxy 類別的實例。 否則,它與 Unity 的建立/更新/解構周期無關。

內容是 Unity 元件

WorldLockingContext 是 Unity 元件,會以一般方式新增至場景中的物件。 其欄位會顯示在 Unity Inspector 中,如同任何其他一般 Unity 元件的欄位一樣。

雖然在單一場景中有多個使用中的 WorldLockingContexts 不是錯誤,但可能不需要,因為行為未定義,取決於物件載入的未知順序。

載入 WorldLockingContext 時,會套用內容上的設定。 具體來說,內容會在 OnEnable 呼叫中將其設定推送至世界鎖定工具管理員,而且每當其場景變成作用中的場景時。 後者會套用為 Unity.SceneManager.activeSceneChanged 回呼的一部分,只有在新的使用中場景是內容所屬的場景時,才會套用後者。

所有設定都可以從腳本套用

在運行時間的任何時間點,應用程式可以透過腳本將自定義設定套用至 WorldLockingManager。 如果需要任何資源卸除和重建,才能影響設定的變更,該重建將會立即在設定變更上進行。

雖然有一些便利成員可從 WorldLockingManager 取得個別屬性值,例如 AutoSave,但參數的設定一律會在匯總中發生。 例如,切換 AutoMerge 和 AutoRefreeze 功能的程式代碼可能如下所示:

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

同樣地,診斷設定也一樣。

請注意,以這種方式一次變更多個設定只會產生單一重建的成本(如果需要的話)。

設定 優先順序

目前套用至 WorldLockingManager 之設定的規則非常簡單:

  1. 如果未載入任何包含內容的場景,而且尚未從腳本明確設定任何設定,WorldLockingManager 就會有預設設定。

  2. 設定會保留其值,直到以場景載入 WorldLockingContext 覆寫,或腳本中從應用程式叫用的明確變更為止。

從內容和腳本的設定混合世界鎖定工具管理員設定時,應謹慎使用。 由於內容一律會在載入時套用其設定,因此腳本會在載入期間手動套用設定,特別是從其 OnEnable 回呼,可能會遇到競爭條件和不確定的行為。

可用的設定

控制世界鎖定工具行為的可用設定分成群組,如下所示。

基本世界鎖定內容設定

自動化設定

自動化設定可控制世界鎖定工具管理員的運行時間行為。 可用於修改的欄位及其含意記載於 Manager 設定 類別中。 他們著重於由管理員啟用或停用自動定期動作。 您可以改為手動執行任何停用的自動化動作。

內容的自動化區段

連結設定

鏈接設定可用來明確定義轉換將用來套用世界鎖定工具修正的場景 GameObjects

內容的連結區段

[使用現有] 字段允許使用相機鑽機在場景中設定連結的物件一次(使用現有“false),而且不會藉由載入後續的內容場景來覆寫 (使用現有] true)。

相反地,將 [使用現有] 設定為 false 可讓具有不同相機鑽機的多個場景系結至相機階層中適當的位置。

從腳本建立和管理相機階層時,應該在所有內容上將 [使用現有] 字段設定為 true,並且從相機管理腳本明確更新連結。

未提供必要的轉換時,保留 Null 或所有內容都有「使用現有」,則系統會發出警告,並嘗試推斷好選擇。 建議但不需要明確設定適當的轉換,而不是讓系統猜測。

這裏還有兩個選項可控制相機轉換校正的套用方式。

[套用調整] 的第一個複選框預設為已啟用。 這會告訴系統將計算相機校正每個畫面套用至「調整畫面」 GameObject。 停用這是一項非常進階的功能,而且只有在解決所有其他問題之後才嘗試,並已深入瞭解世界鎖定工具。 簡言之,它告訴系統,相機校正不會套用到相機,但會以其他方式套用。 一般而言,這是透過 AlignSubtree 元件,但不需要。

第二個複選框,針對 [無音調和滾滾],會告訴系統從 轉換 Playspace 到鎖定的空間中計算的任何音調和滾滾。 (請參閱 WLT 座標空間的討論。 這不會影響系統所套用的 SpacePin 旋轉,但只會影響凍結世界引擎計算的世界鎖定相機校正轉換。

錨點管理設定

錨點管理會設定錨點追蹤系統的所有明確選取專案。 此選取專案目前只會在啟動時完成,而且一旦選取后即無法變更。

此處的其他設定允許控制基礎內部錨點圖形的密度。 這些可能會隨時變更,不過它們的效果可能需要一些時間才能傳播到內部圖表。

涵蓋非常大的區域時,可能會想要降低內部錨點圖形的密度,以犧牲效能的精確度。 增加 MinNewAnchorDistance 只會這樣做。 藉由增加新增內部錨點之前所需的最小距離,錨點之間的間距會增加,因此錨點密度會減少。

請注意,為了通過邊緣建立測試,MaxAnchorEdgeLength 必須大於MinNewAnchorDistance。 實際上,MaxAnchorEdgeLength 大於 10-20%,然後 MinNewAnchorDistance 運作良好。

MaxLocalAnchors 參數,而不是修改密度,直接限制內部錨點的數目。 目前,當錨點計數超過限制時,離相機最遠的錨點會回收以降低數位。 不過,其他演算法很有趣且正在調查中,因此應用程式不應相依於此特定實作。

內容的錨點管理區段

更多詳細數據會記錄在 Anchor 設定 結構內。

診斷設定

診斷設定可控制診斷的收集,以分析行為和偵錯。 它們通常應該保留 「使用預設值」集合,除此之外,也會停用診斷的集合。 診斷集合是絕佳的效能拖曳,因此除非需要,否則應該避免。

內容的診斷區段

在開發期間,當看到非預期和不想要的行為時,停用 [使用預設值] 並啟用 [診斷] 所收集的診斷數據 設定。已啟用可啟用數據收集,有助於瞭解和修正該行為。

診斷 設定 類別中會描述可用於修改的欄位。

預設設定

管理員和診斷設定都包含設定中的 [使用預設值] 複選框。 腳本也提供 「Use Defaults」 屬性。

當 「Use Defaults」 屬性為 true 時,會使用目前的預設設定。 如果新版本中的屬性預設值變更,“使用預設值”屬性會指示系統使用新的屬性值。

隨時將 「Use Defaults」 屬性設定為 true,會將所有值重設為其 目前的 預設值。 若要在指定時間鎖定預設值快照集的值,請啟用 「Use Defaults」 屬性,將所有字段重設為目前的預設值,然後取消設定複選框,以防止更新變更這些字段。

建議將 [使用預設值] 設定為 true,但測試與偵錯的開發期間除外。

另請參閱