Perdita del rilevamento in Unity

Quando il dispositivo non è in grado di individuarsi nel mondo, l'app riscontra "rilevamento della perdita". Per impostazione predefinita, Unity sospende il ciclo di aggiornamento e visualizza un'immagine iniziale all'utente ogni volta che si perde il rilevamento. Una volta recuperato il rilevamento, l'immagine iniziale viene disattivata e il ciclo di aggiornamento continua.

In alternativa, l'utente può gestire manualmente questa transizione rifiutando esplicitamente l'impostazione. Tutto il contenuto sembra diventare bloccato durante la perdita di rilevamento se non viene fatto nulla per gestirlo.

Gestione predefinita

Il ciclo di aggiornamento e tutti i messaggi e tutti gli eventi si arresteranno per la durata della perdita di rilevamento per impostazione predefinita. Allo stesso tempo, all'utente verrà visualizzata un'immagine. È possibile personalizzare questa immagine passando a Modifica-Impostazioni-Lettore>>, facendo clic su Immagine iniziale e impostando l'immagine Holographic Tracking Loss.

Gestione manuale

Per gestire manualmente la perdita di rilevamento, è necessario passare a Modifica>lettore impostazioni>> progetto piattaforma UWP (Universal Windows Platform) scheda>Impostazioni iniziale Windows>Holographic e deselezionare "On Tracking Loss Pause and Show Image". Successivamente, è necessario gestire il rilevamento delle modifiche con le API specificate di seguito.

Spazio dei nomi: UnityEngine.XR.WSA
Tipo: WorldManager

  • World Manager espone un evento per rilevare i dati persi/ottenuti (WorldManager.OnPositionalLocatorStateChanged) e una proprietà per eseguire una query sullo stato corrente (WorldManager.state)
  • Quando lo stato di rilevamento non è attivo, la fotocamera non sembra traslare nel mondo virtuale anche quando l'utente si traduce. Gli oggetti non corrispondono più ad alcuna posizione fisica e tutto verrà bloccato.

Quando si gestiscono autonomamente le modifiche di rilevamento, è necessario eseguire il polling della proprietà di stato per ogni frame o gestire l'evento OnPositionalLocatorStateChanged .

Polling

Lo stato più importante è PositionalLocatorState.Active, il che significa che il rilevamento è completamente funzionante. Qualsiasi altro stato comporterà solo delta rotazionali alla fotocamera principale. Ad esempio:

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

Gestione dell'evento OnPositionalLocatorStateChanged

Più facilmente, è anche possibile sottoscrivere OnPositionalLocatorStateChanged per gestire le transizioni:

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

Vedi anche