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

Если устройство не может располагаться в мире, в приложении происходит «отслеживание потерь». По умолчанию Unity приостанавливает цикл обновления и отображает изображение заставки для пользователя во время отслеживания. После повторного выполнения отслеживания изображение-заставка исчезает, а цикл обновления продолжается.

В качестве альтернативы пользователь может вручную справиться с этим переходом, отменив параметр. При отслеживании потерь все содержимое становится заблокированным, если не выполняется никаких действий по его обработке.

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

Цикл обновления и все сообщения и события будут прекращаться по умолчанию на время отслеживания потерь. В то же время для пользователя будет отображаться изображение. вы можете настроить этот образ, перейдя в меню правка- > Параметры- > Player, щелкнув изображение заставки и задав изображение потери отслеживания с помощью параметра holographic.

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

чтобы вручную обрабатывалась возможность отслеживания потерь, необходимо перейдите в меню изменить>Project Параметры>проигрыватель>универсальная платформа Windows параметры>изображение> заставкиWindows holographic и снять флажок "при отслеживании потерь приостановить и показывать изображение". После этого необходимо выполнить обработку изменений отслеживания с помощью API, указанных ниже.

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

  • Менеджер по всему миру предоставляет событие для обнаружения потерянных или полученных данных отслеживания (ворлдманажер. онпоситионаллокаторстатечанжед) и свойство для запроса текущего состояния (ворлдманажер. State).
  • Если отслеживание состояния не активно, Камера не будет переводиться в виртуальном мире даже при преобразовании пользователя. Объекты больше не будут соответствовать ни одному физическому расположению, а все будут отображаться как заблокированные.

При самостоятельной обработке изменений необходимо либо опросить свойство State для каждого кадра, либо обработать событие онпоситионаллокаторстатечанжед .

Опросы

Наиболее важное состояние — поситионаллокаторстате. 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;
    }
}

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

Более удобно, что вы также можете подписываться на онпоситионаллокаторстатечанжед для управления переходами:

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

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