Unity 中的追蹤遺失

當裝置在世界中找不到自己時,應用程式會遇到「追蹤遺失」。 根據預設,Unity 會暫停更新迴圈,並在每次追蹤遺失時向使用者顯示啟動顯示影像。 一旦重新取得追蹤,啟動顯示映射就會消失,而且更新迴圈會繼續。

或者,使用者可以退出宣告設定,以手動處理此轉換。 如果沒有任何動作可以處理內容,則所有內容似乎在追蹤遺失期間變成內文鎖定。

預設處理

更新迴圈和所有訊息和事件預設都會在追蹤遺失期間停止。 同時,影像將會向使用者顯示。 您可以移至 [編輯- > 設定- > 播放機],按一下 [啟動顯示影像],然後設定全像攝影追蹤遺失影像來自訂此影像。

手動處理

若要手動處理追蹤遺失,您必須移至[編輯>專案設定>播放機>通用 Windows 平臺設定] 索引標籤 >啟動顯示影像>Windows 全像攝影,然後取消核取 [追蹤遺失暫停並顯示影像]。 之後,您必須使用下列指定的 API 來處理追蹤變更。

Namespace:UnityEngine.XR.WSA
Type: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
    }
}

另請參閱