Suivi des pertes dans UnityTracking loss in Unity

Lorsque l’appareil ne peut pas se trouver dans le monde entier, l’application rencontre une « perte de suivi ».When the device can't locate itself in the world, the app experiences "tracking loss". Par défaut, Unity interrompt la boucle de mise à jour et affiche une image de démarrage pour le suivi des utilisateurs à tout moment est perdu.By default, Unity will pause the update loop and display a splash image to the user anytime tracking is lost. Une fois le suivi récupéré, l’image de démarrage disparaît et la boucle de mise à jour se poursuit.Once tracking is regained, the splash image goes away and the update loop continues.

En guise d’alternative, l’utilisateur peut gérer manuellement cette transition en désactivant le paramètre.As an alternative, the user can manually handle this transition by opting out of the setting. Tout le contenu semblera être verrouillé pendant le suivi de la perte si rien n’est fait pour le gérer.All content will seem to become body locked during tracking loss if nothing is done to handle it.

Gestion par défautDefault Handling

La boucle de mise à jour et tous les messages et événements s’arrêtent pendant la durée du suivi de la perte par défaut.The update loop and all messages and events will stop for the duration of tracking loss by default. En même temps, une image sera affichée à l’utilisateur.At that same time, an image will be displayed to the user. Vous pouvez personnaliser cette image en accédant à modifier >paramètres->Player, en cliquant sur image de l’écran de démarrage et en définissant l’image de perte de suivi holographique.You can customize this image by going to Edit->Settings->Player, clicking Splash Image, and setting the Holographic Tracking Loss image.

Gestion manuelleManual Handling

Pour gérer manuellement le suivi des pertes, vous devez accéder à modifier les > paramètres > > du projet plateforme Windows universelle de l'onglet Paramètres > de l'image de démarrage > Windows holographique et décocher « en cas de perte de suivi et d’affichage de l’image ».To manually handle tracking loss, you need to go to Edit > Project Settings > Player > Universal Windows Platform settings tab > Splash Image > Windows Holographic and uncheck "On Tracking Loss Pause and Show Image". Après quoi, vous devez gérer les modifications de suivi avec les API spécifiées ci-dessous.After which, you need to handle tracking changes with the APIs specified below.

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

  • World Manager expose un événement pour détecter le suivi des pertes/gains (WorldManager. OnPositionalLocatorStateChanged) et une propriété pour interroger l’état actuel (WorldManager. State)World Manager exposes an event to detect tracking lost/gained (WorldManager.OnPositionalLocatorStateChanged) and a property to query the current state (WorldManager.state)
  • Lorsque l’état de suivi n’est pas actif, l’appareil photo n’apparaît pas dans le monde virtuel, même lorsque l’utilisateur se traduit.When the tracking state isn't active, the camera won't appear to translate in the virtual world even as the user translates. Les objets ne correspondent plus à aucun emplacement physique et tous les corps sont verrouillés.Objects will no longer correspond to any physical location and all will appear body locked.

Lorsque vous gérez le suivi des modifications par vous-même, vous devez interroger la propriété State pour chaque frame ou gérer l’événement OnPositionalLocatorStateChanged .When handling tracking changes on your own, you either need to poll for the state property each frame or handle the OnPositionalLocatorStateChanged event.

InterrogationPolling

L’état le plus important est PositionalLocatorState. active, ce qui signifie que le suivi est entièrement fonctionnel.The most important state is PositionalLocatorState.Active, which means tracking is fully functional. Tous les autres États entraînent uniquement des deltas de rotation vers la caméra principale.Any other state will result in only rotational deltas to the main camera. Par exemple :For example:

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 OnPositionalLocatorStateChangedHandling the OnPositionalLocatorStateChanged event

Plus pratique, vous pouvez également vous abonner à OnPositionalLocatorStateChanged pour gérer les transitions :More conveniently, you can also subscribe to OnPositionalLocatorStateChanged to handle the 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 aussiSee also