Contrôler le processus de suivi Mega
Cet article explique comment contrôler les différentes fonctions et paramètres du processus de suivi Mega pour répondre aux besoins de différents scénarios d’application.
Avant de commencer
- Vérifiez Puis-je déjà utiliser ma fonction de localisation ? pour confirmer que le dépôt de localisation a bien été créé et que la carte a été ajoutée.
Workflow du tracker
Le workflow du tracker est le suivant :
flowchart LR
subgraph startup_graph[Démarrage]
direction TB
sstart((session démarrée))
create[Création native]
load(Charger target)
init_g[[Initialisation]]
end
subgraph init_graph[Initialisation]
direction TB
init_{Initialisation 6DoF réussie<br>ou non-6DoF}
init[[Processus d'initialisation du suivi local]]
localization_g[[Localisation initiale]]
end
subgraph localization_graph[Localisation initiale]
direction TB
localize__{Localisation activée et<br>intervalle de requête dépassé}
localize[Localisation cloud]
localize_{Localisé sur block et<br>block chargé}
tracking_g[[Suivi]]
end
subgraph tracking_graph[Suivi]
direction TB
tracking[[Suivi continu]]
localizet_{Localisation activée et<br>intervalle de requête dépassé}
localize2[Localisation cloud]
localize2_{Localisé sur block et<br>block chargé}
localization_g2[[Localisation initiale]]
end
subgraph stopping_graph[Arrêt]
direction TB
unload(Dechargér target)
dispose[Destruction native]
sstop([session arrêtée])
end
sstart --> create --> load --> init_g
init --> init_ --> |Yes| localization_g
localize --> localize_ --> |Yes| tracking_g
localize_ --> |No| localize__ --> |Yes| localize
unload --> dispose --> sstop
init_ --> |No| init
tracking --> localizet_ --> |Yes| localize2 --> localize2_ --> |Yes| tracking
localizet_ --> |No| tracking
localize2_ --> |No| localization_g2
startup_graph --> init_graph
init_graph --> localization_graph
localization_graph --> tracking_graph
tracking_graph --> localization_graph
tracking_graph --> stopping_graph
Le flux se décompose en plusieurs étapes :
- Démarrage :
- Après le démarrage de la session, le tracker natif est créé.
- Après le Start() de la target, celle-ci est chargée dans le tracker correspondant.
- Initialisation :
- Avec une frame source 6DoF, le processus d’initialisation du suivi local démarre.
- Avec une frame source non 6DoF, l’étape d’initialisation est sautée et l’on passe directement à la localisation initiale.
- Ce processus peut prendre un certain temps, selon la complexité de la scène et les capacités de l’appareil, et dépend généralement de l’algorithme utilisé au niveau de la frame source.
- Avec la configuration par défaut, ce contenu n’est pas affiché ; vous pouvez contrôler ce comportement via l’option du composant ActiveController.
- Localisation initiale :
- Si la localisation est activée et que l’intervalle de requête est dépassé, le tracker envoie une requête de localisation au cloud.
- Si la localisation réussit et que le block correspondant à l’id retourné par le service est chargé, la phase de suivi démarre ; si le block n’est pas chargé, le système attend la fin du chargement du block et la prochaine requête de localisation.
- Si la localisation échoue, le tracker continue d’attendre la prochaine requête de localisation.
- Ce processus peut prendre un certain temps, selon la facilité de localisation de la scène, la qualité de la capture et de la cartographie, ainsi que l’état du réseau.
- Avec la configuration par défaut, ce contenu n’est pas affiché ; vous pouvez contrôler ce comportement via l’option du composant ActiveController.
- Si la localisation est activée et que l’intervalle de requête est dépassé, le tracker envoie une requête de localisation au cloud.
- Suivi :
- Le tracker suit en continu le block courant.
- Si la localisation est activée et que l’intervalle de requête est dépassé, le tracker envoie une requête de localisation au cloud.
- Si la localisation réussit et que l’id renvoyé ne change pas, le suivi continue ; si l’id change et que le block est chargé, le tracker bascule vers le nouveau block et continue le suivi ; si l’id change mais que le block n’est pas chargé, le système attend la fin du chargement du block et la prochaine requête de localisation.
- Si la localisation échoue, le tracker continue de suivre le block courant et attend la prochaine requête de localisation.
- Avec la configuration par défaut, seul le contenu sous les nœuds target actuellement suivis (TargetController.IsTracked ==
true) est affiché ; vous pouvez contrôler ce comportement via l’option du composant ActiveController.
- Arrêt :
- Après l’arrêt de la session, la target est déchargée et le tracker natif est détruit.
Ajuster le niveau de prise en charge de l’appareil
La propriété MegaTrackerFrameFilter.MinInputFrameLevel de MegaTrackerFrameFilter sert à spécifier le niveau minimal d’appareil pris en charge par Mega.
![]()
Mega peut fonctionner avec presque tous les types de frame source, mais les différentes frame sources ont des effets différents sur le suivi.
Par défaut, Mega choisit la frame source prise en charge par l’appareil au niveau le plus élevé. La session compatible Mega avec la configuration par défaut est déjà configurée avec des frame sources 6DoF et 5DoF.
Pour prendre en charge un certain niveau de frame source pendant l’exécution de Mega, deux conditions doivent être remplies :
- La frame source requise doit se trouver dans le groupe de frame sources optionnelles de la session.
- MegaTrackerFrameFilter.MinInputFrameLevel doit être supérieur ou égal au niveau CameraTransformType de la frame source requise.
Par exemple, pour prendre en charge le suivi 3DoF dans la session par défaut, il faut :
- Ajouter ThreeDofCameraDeviceFrameSource au groupe de frame sources de la session.
- Modifier MegaTrackerFrameFilter.MinInputFrameLevel sur ThreeDof.
Autre exemple, pour supprimer le support du suivi 5DoF dans la session par défaut, il faut :
- Supprimer InertialCameraDeviceFrameSource du groupe de frame sources de la session.
- Modifier MegaTrackerFrameFilter.MinInputFrameLevel sur SixDof (même sans cette modification, le 5DoF ne sera pas utilisé puisqu’il n’y a pas de frame source 5DoF).
Si aucune frame source répondant aux conditions n’est disponible, l’assemblage de la session échouera.
Comprendre l’état actuel du système
Avec la configuration de session par défaut, les messages UI s’affichent à l’écran et contiennent des informations sur l’état du suivi Mega.
Lorsque la localisation réussit, le texte d’état Found apparaît sous les informations du service Mega ; lorsque la localisation échoue, le texte NotFound apparaît.
Un block chargé est affiché sous la forme Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Ici, <objName> est le nom de l’objet scène correspondant au block, <name> est le nom du block, et <id> est l’ID du block. trackingStatus peut être Tracking ou NotTracking, indiquant si le block courant est suivi ou non.
![]()
Quand la localisation réussit, un block localisé mais non chargé s’affiche sous la forme Block [scnObj=?]: <name> (<id>).
![]()
Astuce
NotFound est un état normal ; il apparaît souvent pendant tout le fonctionnement de Mega, et le suivi continue malgré cet état. En général, il n’est pas nécessaire de traiter spécialement l’état NotFound dans le développement d’une application.
Vous pouvez utiliser l’événement MegaTrackerFrameFilter.LocalizationRespond pour obtenir l’état de localisation courant et savoir si le système a trouvé la target à suivre.
Le code suivant montre comment utiliser cet événement et comment traiter les états anormaux courants qui doivent attirer l’attention de l’application :
private void Awake()
{
megaTracker.LocalizationRespond += HandleLocalizationStatusChange;
}
private void HandleLocalizationStatusChange(MegaLocalizationResponse response)
{
var status = response.Status;
wakingUpCount = status == MegaTrackerLocalizationStatus.WakingUp ? wakingUpCount + 1 : 0;
if (wakingUpCount >= 5)
{
// le service est en cours de reveil ; l utilisateur final doit attendre
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// la limite de QPS est depassee ; certains utilisateurs finaux peuvent echouer aleatoirement a se localiser (la qualite globale du tracking diminue)
// il faut generalement payer pour augmenter la limite de QPS afin de garantir la qualite du tracking avec le nombre actuel d utilisateurs
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// le Token a expire ; cela ne se produit que lors de l acces au service via l interface Token
// pour resoudre ce probleme, l application doit demander un Token a son propre backend et appeler MegaTrackerFrameFilter.UpdateToken pour le mettre a jour
}
}
Si l’application rencontre souvent l’état MegaTrackerLocalizationStatus.RequestTimeout, cela indique généralement que le réseau entre l’appareil et le service n’est pas bon. Il est recommandé d’optimiser l’environnement réseau pour améliorer la qualité du suivi. Si le réseau ne peut pas être amélioré, vous pouvez envisager d’augmenter le délai d’expiration des requêtes.
Note
Cet événement ne permet pas d’obtenir le pose renvoyé par la localisation.
En réalité, le pose renvoyé par la localisation n’est pas nécessaire pour le développement applicatif. Après le retour de la localisation, EasyAR calcule via des algorithmes locaux un pose plus précis pour le développeur, et ce pose est déjà reflété dans le transform du block. Consultez Obtenir les résultats d’exécution de la session.
Mettre en pause et reprendre
Le suivi et la localisation de Mega peuvent être mis en pause et repris séparément.
Mettre en pause le suivi
Définir MegaTrackerFrameFilter.enabled sur false permet de mettre le suivi en pause.
Par défaut, lorsque le suivi est mis en pause, tout le contenu sous les nœuds block est masqué.
Mettre en pause la localisation
Définir MegaTrackerFrameFilter.EnableLocalization sur false permet de mettre la localisation en pause.
Avertissement
Mettre la localisation en pause affecte les résultats de suivi et n’est généralement pas recommandé. Veuillez l’utiliser sous la direction du support technique EasyAR.
Si la localisation a été mise en pause pendant l’exécution de l’application, veuillez le préciser lorsque vous signalez un problème à EasyAR.
Contrôle du service et des requêtes
Vous pouvez contrôler le comportement des requêtes vers le service en modifiant les paramètres du composant MegaTrackerFrameFilter.
Choisir le dépôt de localisation
Sélectionnez l’objet Mega Tracker sous la session ; les options sous Service permettent d’ajuster le dépôt de localisation connecté. Cette option doit être définie avant le démarrage de la session.
Avec la configuration par défaut, Access Source est Global Config, la configuration du service utilise la configuration globale, et les paramètres de service peuvent être modifiés dans Project Settings > EasyAR > Sense > Mega > Mega Block. Cette configuration affecte toutes les sessions utilisant cette configuration globale.
![]()
Astuce
La configuration du service peut être obtenue depuis le centre de développement EasyAR.

Si vous devez utiliser des dépôts de localisation différents dans différentes sessions, définissez Access Source sur API Key, puis modifiez les paramètres de service ci-dessous.
![]()
Dans le script, vous pouvez modifier MegaTrackerFrameFilter.ServiceAccessSource et MegaTrackerFrameFilter.ServiceAccessData pour obtenir le même effet.
Par exemple, le code suivant montre comment configurer le tracker avant le démarrage de la session pour qu’il se connecte au service avec des paramètres à l’exécution :
megaTracker.ServiceType = easyar.MegaApiType.Block;
megaTracker.ServiceAccessSource = easyar.MegaServiceAccessSourceType.APIKey;
megaTracker.ServiceAccessData = new easyar.APIKeyAccessData
{
ServerAddress = serverAddress,
APIKey = apiKey,
APISecret = apiSecret,
AppID = appID
};
Intervalle et délai d’expiration des requêtes
Sélectionnez l’objet Mega Tracker sous la session ; les options sous Request Time Parameters permettent d’ajuster l’intervalle et le délai d’expiration des requêtes vers le service.
![]()
Dans le script, vous pouvez modifier MegaTrackerFrameFilter.RequestTimeParameters pour obtenir le même effet.
Avertissement
Modifier l’intervalle de requête affecte les résultats de suivi et n’est généralement pas recommandé. Veuillez l’utiliser sous la direction du support technique EasyAR.
Si l’intervalle de requête a été modifié pendant l’exécution de l’application, veuillez le préciser lorsque vous signalez un problème à EasyAR.
Changer de dépôt de localisation
Utilisez MegaTrackerFrameFilter.SwitchEndPoint pour changer de dépôt de localisation à l’exécution. Avec cette interface, l’image caméra et la session ne seront pas interrompues.
Sujets associés
- Bonnes pratiques d’AR Session pour Mega présente comment créer et configurer une AR Session adaptée à Mega
- Ajouter une target de suivi Mega explique comment ajouter une target de suivi Mega et charger le modèle block dans Unity Editor pour aider au développement
- Ajouter un groupe de frame sources explique comment modifier le groupe de frame sources de la session
- Obtenir les résultats d’exécution de la session explique comment obtenir les résultats de suivi des composants de session
- Messages UI explique comment utiliser les messages UI pour afficher l’état de la session