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