Partager via


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 se poursuit.

En guise d’alternative, l’utilisateur peut gérer manuellement cette transition en refusant le paramètre. Tout le contenu semble devenir 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 tous les événements s’arrêtent pendant la durée de la perte de suivi par défaut. En même temps, une image s’affiche à 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 de perte de suivi holographique.

Gestion manuelle

Pour gérer manuellement la perte de suivi, vous devez accéder à Modifier>le Lecteur> des paramètres>du projet plateforme Windows universelle onglet Paramètres de l’image>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 n’apparaît pas à traduire dans le monde virtuel, même lorsque l’utilisateur se traduit. Les objets ne correspondent plus à un emplacement physique et tous apparaissent verrouillés par le corps.

Lorsque vous gérez les modifications de suivi par vous-même, vous devez interroger la propriété d’état chaque image 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 principale. 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 facilement, 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