Traceringsverlies in Unity

Wanneer het apparaat zich niet ter wereld kan vinden, ervaart de app 'traceringsverlies'. Unity pauzeert standaard de updatelus en geeft een welkomstafbeelding weer voor de gebruiker wanneer tracering verloren gaat. Zodra het bijhouden weer is hersteld, verdwijnt de welkomstafbeelding en wordt de updatelus voortgezet.

Als alternatief kan de gebruiker deze overgang handmatig afhandelen door zich af te zien van de instelling. Alle inhoud lijkt tijdens het bijhouden van het verlies te worden vergrendeld als er niets wordt gedaan om deze af te handelen.

Standaardafhandeling

De updatelus en alle berichten en gebeurtenissen worden standaard gestopt voor de duur van traceringsverlies. Op dat moment wordt er een afbeelding weergegeven voor de gebruiker. U kunt deze afbeelding aanpassen door naar Edit-Instellingen-Player>> te gaan, te klikken op Splash Image en de holographic Tracking Loss-afbeelding in te stellen.

Handmatige verwerking

Als u traceringsverlies handmatig wilt afhandelen, > gaat u naar het tabblad Edit Project Instellingen> Player Universeel Windows-platform>settings> (Instellingen)Splash Image>Windows Holographic en het selectievakje 'On Tracking Loss Pause and Show Image' (Bij het bijhouden van verlies onderbreken en afbeelding tonen) uit. Daarna moet u wijzigingen bijhouden met de hieronder opgegeven API's.

Naamruimte:UnityEngine.XR.WSA
Type:WorldManager

  • World Manager maakt een gebeurtenis voor het detecteren van verloren/verkregen tracering (WorldManager.OnPositionalLocatorStateChanged) en een eigenschap om een query uit te voeren op de huidige status (WorldManager.state)
  • Wanneer de traceringstoestand niet actief is, lijkt de camera niet te worden vertaald in de virtuele wereld, zelfs niet wanneer de gebruiker zich vertaalt. Objecten komen niet meer overeen met een fysieke locatie en alle objecten worden weergegeven als vergrendeld.

Bij het zelf bijhouden van wijzigingen moet u de statuseigenschappen van elk frame peilen of de gebeurtenis OnPositionalLocatorStateChanged verwerken.

Navragen

De belangrijkste status is PositionalLocatorState.Active, wat betekent dat tracering volledig functioneel is. Elke andere status resulteert in alleen rotatie delta's naar de hoofdcamera. Bijvoorbeeld:

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

De gebeurtenis OnPositionalLocatorStateChanged verwerken

U kunt zich ook abonneren op OnPositionalLocatorStateChanged om de overgangen te verwerken:

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

Zie ook