Perdita del rilevamento in Unity

Quando il dispositivo non riesce a individuarsi nel mondo, l'app sperimenta "rilevamento della perdita". Per impostazione predefinita, Unity sospende il ciclo di aggiornamento e visualizza un'immagine iniziale all'utente ogni volta che il rilevamento viene perso. Una volta recuperato il rilevamento, l'immagine iniziale viene interrotta e il ciclo di aggiornamento continua.

In alternativa, l'utente può gestire manualmente questa transizione rifiutando 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 gli eventi si arresteranno per la durata della perdita di rilevamento per impostazione predefinita. Allo stesso tempo, un'immagine verrà visualizzata all'utente. È possibile personalizzare questa immagine passando a Modifica impostazioni-lettore>>, facendo clic su Immagine iniziale e impostando l'immagine Di rilevamento olografico.

Gestione manuale

Per gestire manualmente la perdita di rilevamento, è necessario passare a Modifica> impostazioniprogetto>Lettore>piattaforma UWP (Universal Windows Platform) impostazioni della scheda>Immagine iniziale>windows Holographic e deselezionare "On Tracking Loss Pause and Show Image". Dopodiché, è necessario gestire le modifiche di rilevamento con le API specificate di seguito.

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

  • World Manager espone un evento per rilevare i rilevamenti 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 tradurre nel mondo virtuale anche quando l'utente converte. Gli oggetti non corrispondono più a una posizione fisica e tutti verranno bloccati.

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

Polling

Lo stato più importante è PositionalLocatorState.Active, che significa che il rilevamento è completamente funzionale. 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

È 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