Ś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 dla użytkownika 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ę zablokowana podczas śledzenia utraty, jeśli nic nie zostanie zrobione, aby go obsłużyć.

Obsługa domyślna

Pętla aktualizacji i wszystkie komunikaty i zdarzenia będą domyślnie zatrzymywane 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> odtwarzacza>, klikając pozycję Obraz powitalny i ustawiając obraz śledzenia holograficznego utraty.

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ę> Ustawieniapowitania obrazów> systemuWindows 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
Type:WorldManager

  • World Manager uwidacznia zdarzenie w celu wykrywania śledzenia utraconych/uzyskanych (WorldManager.OnPositionalLocatorStateChanged) i właściwości do wykonywania zapytań o bieżący stan (WorldManager.state)
  • Gdy stan śledzenia nie jest aktywny, aparat nie będzie widoczny do przetłumaczenia w świecie wirtualnym, nawet gdy użytkownik tłumaczy. Obiekty nie będą już odpowiadać żadnej lokalizacji fizycznej i będą wyświetlane treść zablokowana.

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

Sondowanie

Najważniejszy stan to 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ż