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