Потеря слежения в UnityTracking loss in Unity

Если устройство не может располагаться в мире, в приложении происходит «отслеживание потерь».When the device can't locate itself in the world, the app experiences "tracking loss". По умолчанию Unity приостанавливает цикл обновления и отображает изображение заставки для пользователя во время отслеживания.By default, Unity will pause the update loop and display a splash image to the user anytime tracking is lost. После повторного выполнения отслеживания изображение-заставка исчезает, а цикл обновления продолжается.Once tracking is regained, the splash image goes away and the update loop continues.

В качестве альтернативы пользователь может вручную справиться с этим переходом, отменив параметр.As an alternative, the user can manually handle this transition by opting out of the setting. При отслеживании потерь все содержимое становится заблокированным, если не выполняется никаких действий по его обработке.All content will seem to become body locked during tracking loss if nothing is done to handle it.

Обработка по умолчаниюDefault Handling

Цикл обновления и все сообщения и события будут прекращаться по умолчанию на время отслеживания потерь.The update loop and all messages and events will stop for the duration of tracking loss by default. В то же время для пользователя будет отображаться изображение.At that same time, an image will be displayed to the user. Вы можете настроить этот образ, перейдя в меню "Правка"->"Параметры" — >"проигрыватель", щелкнув изображение заставки и задав образ потери отслеживания с помощью.You can customize this image by going to Edit->Settings->Player, clicking Splash Image, and setting the Holographic Tracking Loss image.

Ручная обработкаManual Handling

Чтобы вручную обрабатывалась трассировка, необходимо вернуться к разделу изменение > параметров проекта параметры > проигрывателя > универсальная платформа Windows параметры > изображение заставки > Windows holographic и снять флажок "при отслеживании потерь приостановить и показывать изображение".To manually handle tracking loss, you need to go to Edit > Project Settings > Player > Universal Windows Platform settings tab > Splash Image > Windows Holographic and uncheck "On Tracking Loss Pause and Show Image". После этого необходимо выполнить обработку изменений отслеживания с помощью API, указанных ниже.After which, you need to handle tracking changes with the APIs specified below.

Пространство имен: UnityEngine. XR. WSANamespace: UnityEngine.XR.WSA
Тип: ворлдманажерType: WorldManager

  • Менеджер по всему миру предоставляет событие для обнаружения потерянных или полученных данных отслеживания (ворлдманажер. онпоситионаллокаторстатечанжед) и свойство для запроса текущего состояния (ворлдманажер. State).World Manager exposes an event to detect tracking lost/gained (WorldManager.OnPositionalLocatorStateChanged) and a property to query the current state (WorldManager.state)
  • Если отслеживание состояния не активно, Камера не будет переводиться в виртуальном мире даже при преобразовании пользователя.When the tracking state isn't active, the camera won't appear to translate in the virtual world even as the user translates. Объекты больше не будут соответствовать ни одному физическому расположению, а все будут отображаться как заблокированные.Objects will no longer correspond to any physical location and all will appear body locked.

При самостоятельной обработке изменений необходимо либо опросить свойство State для каждого кадра, либо обработать событие онпоситионаллокаторстатечанжед .When handling tracking changes on your own, you either need to poll for the state property each frame or handle the OnPositionalLocatorStateChanged event.

ОпросPolling

Наиболее важное состояние — поситионаллокаторстате. Active. Это означает, что отслеживание полностью работоспособно.The most important state is PositionalLocatorState.Active, which means tracking is fully functional. Любое другое состояние приведет к появлению в основной камере только ротации.Any other state will result in only rotational deltas to the main camera. Пример:For example:

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

Обработка события ОнпоситионаллокаторстатечанжедHandling the OnPositionalLocatorStateChanged event

Более удобно, что вы также можете подписываться на онпоситионаллокаторстатечанжед для управления переходами:More conveniently, you can also subscribe to OnPositionalLocatorStateChanged to handle the transitions:

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

См. также разделSee also