Suivi des pertes dans Unity

Lorsque l’appareil ne peut pas se localiser dans le monde, l’application subit une « perte de suivi ». Par défaut, Unity suspend la boucle de mise à jour et affiche une image de démarrage à l’utilisateur chaque fois que le suivi est perdu. Une fois le suivi récupéré, l’image de démarrage disparaît et la boucle de mise à jour continue.

En guise d’alternative, l’utilisateur peut gérer manuellement cette transition en refusant le paramètre. Tout le contenu semble être verrouillé pendant la perte de suivi si rien n’est fait pour le gérer.

Gestion par défaut

La boucle de mise à jour et tous les messages et événements s’arrêtent pendant la durée de la perte de suivi par défaut. Dans le même temps, une image est affichée à l’utilisateur. Vous pouvez personnaliser cette image en accédant à Edit-Settings-Player>>, en cliquant sur Image de démarrage et en définissant l’image Holographic Tracking Loss.

Gestion manuelle

Pour gérer manuellement le suivi des pertes, vous devez accéder à Modifier>les paramètres> dulecteur> de projet plateforme Windows universelle onglet> paramètresImage de démarrage>Windows Holographique et décocher « On Tracking Loss Pause and Show Image ». Après quoi, vous devez gérer le suivi des modifications avec les API spécifiées ci-dessous.

Espace de noms :UnityEngine.XR.WSA
Type:WorldManager

  • World Manager expose un événement pour détecter le suivi perdu/gagné (WorldManager.OnPositionalLocatorStateChanged) et une propriété pour interroger l’état actuel (WorldManager.state)
  • Lorsque l’état de suivi n’est pas actif, la caméra ne semble pas se traduire dans le monde virtuel, même si l’utilisateur traduit. Les objets ne correspondent plus à un emplacement physique et tous apparaissent verrouillés.

Lorsque vous gérez vous-même le suivi des modifications, vous devez interroger la propriété d’état pour chaque frame ou gérer l’événement OnPositionalLocatorStateChanged .

Interrogation

L’état le plus important est PositionalLocatorState.Active, ce qui signifie que le suivi est entièrement fonctionnel. Tout autre état entraîne uniquement des deltas de rotation vers la caméra main. Par exemple :

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

Gestion de l’événement OnPositionalLocatorStateChanged

Plus pratique, vous pouvez également vous abonner à OnPositionalLocatorStateChanged pour gérer les transitions :

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

Voir aussi