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