Delen via


Verlies bijhouden in Unity

Wanneer het apparaat zichzelf niet in de wereld kan vinden, ondervindt de app 'traceringsverlies'. Standaard pauzeert Unity de updatelus en geeft een welkomstafbeelding weer voor de gebruiker wanneer het bijhouden verloren gaat. Zodra het bijhouden is hersteld, verdwijnt de welkomstafbeelding en wordt de updatelus voortgezet.

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

Standaardafhandeling

De updatelus en alle berichten en gebeurtenissen worden standaard gestopt voor de duur van het bijhouden van verlies. Tegelijkertijd wordt er een afbeelding weergegeven voor de gebruiker. U kunt deze afbeelding aanpassen door naar Edit-Settings-Player>> te gaan, op Splash Image te klikken en de Holographic Tracking Loss-afbeelding in te stellen.

Handmatige verwerking

Als u het bijhouden van verlies handmatig wilt afhandelen, gaat u naar Project Settings>Player> bewerken>Universeel Windows-platform tabblad>Splash Image>Windows Holographic en schakelt u 'Bij bijhouden van verlies onderbreken en afbeelding weergeven' uit. Daarna moet u het bijhouden van wijzigingen afhandelen met de onderstaande API's.

Naamruimte: UnityEngine.XR.WSA
Type: WorldManager

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

Wanneer u wijzigingen zelf bijhoudt, moet u elk frame een poll uitvoeren voor de statuseigenschap of de gebeurtenis OnPositionalLocatorStateChanged verwerken.

Navragen

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

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

Handiger kunt u 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