Compartir a través de


Pérdida de seguimiento en Unity

Cuando el dispositivo no se puede encontrar 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 cuando 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 opta por 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 de configuración>> del proyecto Plataforma universal de Windows pestaña>Configuración de>presentación Imagen de presentación Windows Holographic y desactive "Al realizar la pausa de pérdida de seguimiento y mostrar imagen". Después, debe controlar los cambios de seguimiento con las API especificadas a continuación.

Espacio de nombres: UnityEngine.XR.WSA
Tipo: 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 incluso cuando 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á como resultado solo 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