Unity 中的追蹤遺失
當裝置無法找到自己的世界時,應用程式會遇到「追蹤遺失」。 根據預設,Unity 會暫停更新迴圈,並在每次遺失追蹤時向使用者顯示啟動顯示影像。 一旦重新取得追蹤,啟動顯示映像就會消失,而更新循環會繼續進行。
或者,使用者可以退出退出設定,手動處理此轉換。 如果沒有任何動作可處理內容,則追蹤遺失期間,所有內容似乎都會變成內文鎖定。
默認處理
更新迴圈和所有訊息和事件預設都會在追蹤遺失期間停止。 同時,系統會向用戶顯示影像。 您可以移至 [編輯>設定-> 播放器]、按兩下 [啟動顯示影像],以及設定全像攝影追蹤遺失影像,來自定義此影像。
手動處理
若要手動處理追蹤遺失,您必須移至 [編輯>專案設定>播放機>]通用 Windows 平台 [設定>] 索引卷標 [啟動圖像>] Windows 全像攝影版,然後取消核取 [追蹤遺失暫停和顯示影像]。 之後,您必須使用下列指定的 API 來處理追蹤變更。
命名空間:UnityEngine.XR.WSA
類型:WorldManager
- World Manager 會公開事件來偵測追蹤遺失/取得 (WorldManager.OnPositionalLocatorStateChanged) 和屬性來查詢目前的狀態 (WorldManager.state)
- 當追蹤狀態不在作用中時,即使使用者翻譯,相機也不會在虛擬世界中翻譯。 物件將不再對應至任何實體位置,而且所有對象都會顯示為內文鎖定。
當您自行處理追蹤變更時,您必須輪詢每個畫面的狀態屬性,或處理 OnPositionalLocatorStateChanged 事件。
輪詢的比較 \(英文\)
最重要的狀態是 PositionalLocatorState.Active,這表示追蹤功能正常。 任何其他狀態只會造成主相機的旋轉差異。 例如:
void Update()
{
switch (UnityEngine.XR.WSA.WorldManager.state)
{
case PositionalLocatorState.Active:
// handle active
break;
case PositionalLocatorState.Activating:
case PositionalLocatorState.Inhibited:
case PositionalLocatorState.OrientationOnly:
case PositionalLocatorState.Unavailable:
default:
// only rotational information is available
break;
}
}
處理 OnPositionalLocatorStateChanged 事件
更方便,您也可以訂閱 OnPositionalLocatorStateChanged 來處理轉換:
void Start()
{
UnityEngine.XR.WSA.WorldManager.OnPositionalLocatorStateChanged += WorldManager_OnPositionalLocatorStateChanged;
}
private void WorldManager_OnPositionalLocatorStateChanged(PositionalLocatorState oldState, PositionalLocatorState newState)
{
if (newState == PositionalLocatorState.Active)
{
// Handle becoming active
}
else
{
// Handle becoming rotational only
}
}