Verlies bijhouden in Unity

Wanneer het apparaat zich niet in de wereld kan vinden, ervaart de app 'traceringsverlies'. Standaard onderbreekt Unity de updatelus en geeft een welkomstafbeelding weer aan de gebruiker wanneer het bijhouden verloren gaat. Zodra het bijhouden is hersteld, verdwijnt de splash-afbeelding en wordt de updatelus voortgezet.

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

Standaardafhandeling

De updatelus en alle berichten en gebeurtenissen stoppen standaard 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 afbeelding Holographic Tracking Loss in te stellen.

Handmatige verwerking

Als u het bijhouden van verlies handmatig wilt afhandelen, gaat u naarProjectinstellingen>bewerken>Player>Universeel Windows-platform tabblad> InstellingenSplash Image>Windows Holographic en schakelt u 'Bij traceren 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 maakt een gebeurtenis beschikbaar om het bijhouden van verloren/verkregen tracering te detecteren (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 niet wanneer de gebruiker vertaalt. Objecten komen niet meer overeen met een fysieke locatie en alle objecten lijken vergrendeld.

Wanneer u wijzigingen zelf bijhoudt, moet u de statuseigenschap van elk frame opvragen of de gebeurtenis OnPositionalLocatorStateChanged afhandelen.

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

Handiger is dat u zich ook kunt 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