Pérdida de seguimiento en Unity

Cuando el dispositivo no se encuentra en el mundo, la aplicación experimenta "pérdida de seguimiento". De forma predeterminada, Unity pausará el bucle de actualización y mostrará una imagen de presentación al usuario cada vez que se pierda el seguimiento. Una vez recuperado el seguimiento, la imagen de presentación desaparece y el bucle de actualización continúa.

Como alternativa, el usuario puede controlar manualmente esta transición si no lo hace. Todo el contenido parecerá estar bloqueado durante la pérdida de seguimiento si no se hace nada para controlarlo.

Control predeterminado

El bucle de actualización y todos los mensajes y eventos se detendrán mientras dure el seguimiento de la pérdida de forma predeterminada. Al mismo tiempo, se mostrará una imagen al usuario. Para personalizar esta imagen, vaya a Edit-Configuración-Player (Editar-Configuración-Player>>), haga clic en Splash Image (Imagen de presentación) y estableciendo la imagen Holographic Tracking Loss (Pérdida de seguimiento holográfico).

Control manual

Para controlar manualmente la pérdida de seguimiento, > debe ir a> Editar Project Configuración>Player> Plataforma universal de Windows pestaña ConfiguraciónSplash Image>Windows Holographic y desactivar "On Tracking Loss Pause and Show Image". Después, debe controlar los cambios de seguimiento con las API especificadas a continuación.

Espacio de nombres:UnityEngine.XR.WSA
Type:WorldManager

  • World Manager expone un evento para detectar el seguimiento perdido o obtenido (WorldManager.OnPositionalLocatorStateChanged) y una propiedad para consultar el estado actual (WorldManager.state)
  • Cuando el estado de seguimiento no está activo, la cámara no parecerá traducirse en el mundo virtual aunque el usuario lo traduzca. Los objetos ya no se corresponderán con ninguna ubicación física y todos aparecerán bloqueados.

Al controlar los cambios de seguimiento por su cuenta, debe sondear la propiedad de estado de cada fotograma o controlar el evento OnPositionalLocatorStateChanged .

Sondeo

El estado más importante es PositionalLocatorState.Active, lo que significa que el seguimiento es totalmente funcional. Cualquier otro estado dará como resultado solo diferencias de rotación en la cámara principal. Por ejemplo:

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

Control del evento OnPositionalLocatorStateChanged

Más cómodamente, también puede suscribirse a OnPositionalLocatorStateChanged para controlar las transiciones:

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

Consulte también