共用方式為


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
    }
}

另請參閱