Udostępnij za pośrednictwem


Śledzenie utraty w a unity

Gdy urządzenie nie może zlokalizować się na świecie, aplikacja doświadcza "śledzenia utraty". Domyślnie aparat Unity wstrzyma pętlę aktualizacji i wyświetli obraz powitalny użytkownikowi w dowolnym momencie śledzenia. Po odzyskaniu śledzenia obraz powitalny zniknie, a pętla aktualizacji będzie kontynuowana.

Alternatywnie użytkownik może ręcznie obsłużyć to przejście, rezygnując z ustawienia. Wydaje się, że cała zawartość stanie się treść zablokowana podczas śledzenia utraty, jeśli nic nie zostanie zrobione, aby go obsłużyć.

Domyślna obsługa

Pętla aktualizacji i wszystkie komunikaty i zdarzenia zostaną domyślnie zatrzymane przez czas śledzenia utraty. W tym samym czasie obraz zostanie wyświetlony użytkownikowi. Możesz dostosować ten obraz, przechodząc do pozycji Edytuj ustawienia-Odtwarzacz>>, klikając pozycję Obraz powitalny i ustawiając obraz utraty śledzenia holograficznego.

Obsługa ręczna

Aby ręcznie obsłużyć utratę śledzenia, należy przejść do pozycji Edytuj>odtwarzacz> ustawień>projektu platforma uniwersalna systemu Windows kartę>Ustawienia powitalnego obrazu>Systemu Windows Holographic i usuń zaznaczenie pola wyboru "Wstrzymywanie śledzenia utraty i pokaż obraz". Następnie należy obsługiwać śledzenie zmian za pomocą interfejsów API określonych poniżej.

Przestrzeń nazw: UnityEngine.XR.WSA
Typ: WorldManager

  • Usługa World Manager uwidacznia zdarzenie w celu wykrycia śledzenia utraconych/uzyskanych (WorldManager.OnPositionalLocatorStateChanged) i właściwości do wykonywania zapytań względem bieżącego stanu (WorldManager.state)
  • Gdy stan śledzenia nie jest aktywny, aparat nie będzie wyglądał na tłumaczenie w świecie wirtualnym, nawet gdy użytkownik tłumaczy. Obiekty nie będą już odpowiadać żadnej lokalizacji fizycznej i wszystkie będą wyświetlane treść zablokowana.

Podczas obsługi śledzenia zmian samodzielnie należy sondować właściwość stanu dla każdej ramki lub obsługiwać zdarzenie OnPositionalLocatorStateChanged .

Sondowanie

Najważniejszym stanem jest PositionalLocatorState.Active, co oznacza, że śledzenie jest w pełni funkcjonalne. Każdy inny stan spowoduje tylko różnice rotacji do głównego aparatu. Na przykład:

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

Obsługa zdarzenia OnPositionalLocatorStateChanged

Wygodniej możesz również subskrybować element OnPositionalLocatorStateChanged w celu obsługi przejść:

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

Zobacz też