Pérdida de seguimiento en Unity

Cuando el dispositivo no se encuentra en el mundo, la aplicación experimenta una "pérdida de seguimiento". De forma predeterminada, Unity pausará el bucle de actualización y mostrará una imagen de presentación al usuario en cualquier momento en 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 al no participar en la configuración. 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 durante la pérdida de seguimiento de forma predeterminada. Al mismo tiempo, se mostrará una imagen al usuario. Para personalizar esta imagen, vaya a Editar-Configuración-Reproductor>>, haga clic en Imagen de presentación y establezca la imagen de pérdida de seguimiento holográfico.

Control manual

Para controlar manualmente la pérdida de seguimiento, debe ir a Editar> reproductor deconfiguración>> del proyecto Plataforma universal de Windows pestaña> configuraciónimagen> de presentaciónWindows Holographic y desactive "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/ganado (WorldManager.OnPositionalLocatorStateChanged) y una propiedad para consultar el estado actual (WorldManager.state)
  • Cuando el estado de seguimiento no está activo, la cámara no parece traducirse en el mundo virtual aunque el usuario se traduzca. Los objetos ya no se corresponden con ninguna ubicación física y todos aparecerán bloqueados en el cuerpo.

Al controlar los cambios de seguimiento por su cuenta, debe sondear la propiedad state 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á lugar solo a deltas rotacionales a 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 convenientemente, 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