Simuler l’exécution avec des fichiers EIF dans Unity
Cet article explique comment utiliser des fichiers EIF pour simuler l’exécution dans Unity, afin de pouvoir faire la majeure partie du développement sur l’ordinateur et voir le résultat de manière intuitive.
Avant de commencer
La simulation utilise des fichiers EIF comme entrée ; il faut donc d’abord enregistrer un fichier EIF :
- Consultez Enregistrer un fichier EIF pour enregistrer un fichier EIF
Il faut aussi comprendre :
- Les notions de base de l’enregistrement d’un fichier EIF et de son utilisation pour la simulation
- Les notions de base, la composition et le flux de travail de AR Session
- Comprendre comment accéder au composant d’enregistrement via accéder aux composants AR de la session
Activer le frame player de la session
ARSession.AssembleOptions propose plusieurs façons de configurer la composition des composants de la session. L’une d’elles consiste à définir AssembleOptions.FrameSource sur FramePlayer pour activer le composant frame player, ce qui permet d’utiliser des fichiers EIF pour simuler l’exécution.
Par exemple :
Session.AssembleOptions.FrameSource = AssembleOptions.FrameSourceSelection.FramePlayer;
Vous pouvez aussi le faire dans l’éditeur : sélectionnez AR Session (EasyAR) et modifiez l’option correspondante dans Assemble Options de la fenêtre Inspector :

Ainsi, lorsque la session démarre, le composant frame player est activé au lieu de sélectionner un autre composant frame source.
L’effet de la lecture de fichiers EIF avec frame player est montré dans la vidéo suivante :
Cette vidéo montre l’effet de l’utilisation de frame player pour exécuter une cartographie spatiale dense sur l’ordinateur. À gauche se trouve la vue
Hierarchy, au centre la vueSceneet à droite la vueGame. Le contenu de la vueGameest identique à ce que l’utilisateur voit sur son téléphone dans le monde réel.
Pendant la lecture du fichier EIF, tous les composants AR de la session peuvent fonctionner normalement, et le contenu de la scène ainsi que la logique d’interaction fonctionnent aussi normalement, ce qui permet de faire la majeure partie du développement sur l’ordinateur et de voir le résultat de manière intuitive.
Astuce
L’effet obtenu en lisant EIF avec frame player sur l’ordinateur est essentiellement le même que sur le téléphone lors de l’enregistrement du fichier EIF.
Important
Le résultat d’exécution lors de la lecture EIF dans la scène dépend de l’appareil utilisé pour l’enregistrement ainsi que de la frame source choisie à ce moment-là. Il est donc recommandé d’utiliser lors de l’enregistrement un appareil identique ou proche de l’appareil cible, afin de garantir que l’effet de lecture soit cohérent avec celui de l’appareil cible. Il faut aussi prêter une attention particulière à l’activation ou non de la fonction de suivi de mouvement dans la scène enregistrée. Si elle n’était pas activée lors de l’enregistrement, elle ne pourra pas non plus être activée lors de la lecture, et les fonctions AR qui en dépendent (par exemple la cartographie spatiale dense, Mega, etc.) ne fonctionneront pas de la même manière que sur l’appareil.
Lire au démarrage de la session
Par défaut, lorsque la session démarre, frame player commence automatiquement à lire le fichier EIF. Avant la lecture, il faut toutefois spécifier le chemin du fichier EIF ; cela peut être défini via les propriétés FramePlayer.FilePathType et FramePlayer.FilePath.
Par exemple :
var player = Session.GetComponent<FramePlayer>();
player.FilePathType = WritablePathType.Absolute;
player.FilePath = path;
Vous pouvez aussi le faire dans l’éditeur : sélectionnez AR Session (EasyAR) et modifiez l’option correspondante du composant Frame Player dans la fenêtre Inspector :

Si aucun fichier n’est spécifié, ou si le chemin du fichier est invalide, frame player échouera au démarrage de la session et affichera un journal d’erreur :
File not found:
Lecture manuelle
Si vous voulez contrôler manuellement le moment de la lecture, vous pouvez définir FramePlayer.enabled sur false avant de démarrer la session :
Session.GetComponent<FramePlayer>().enabled = false;
Vous pouvez aussi le faire dans l’éditeur : sélectionnez AR Session (EasyAR) et décochez Enabled dans le composant Frame Player de la fenêtre Inspector :

Quand il faut lancer la lecture, utilisez Play() pour démarrer.
Par exemple :
if (Session.Assembly.FrameSource is FramePlayer player)
{
player.Play();
}
Chaque appel à Play() arrête la lecture précédente puis recommence depuis le début (si une lecture a déjà eu lieu).
Attention
Lors de la lecture de nouvelles données, les données déjà présentes dans la scène ne sont pas effacées. L’état des composants AR n’est pas non plus réinitialisé ; ils se comportent comme si les données de la caméra passaient soudainement du point où les données précédentes se sont arrêtées au point de départ des nouvelles données.
Bien que cela ait peu d’impact sur certaines fonctions, pour les fonctions qui dépendent du suivi de mouvement (par exemple la cartographie spatiale dense, Mega, etc.), cela peut provoquer des états anormaux et affecter le résultat d’exécution. Il est donc recommandé de redémarrer la session avant de lire de nouvelles données afin de réinitialiser l’état de tous les composants AR.
Pause et reprise
Utilisez FramePlayer.enabled pour contrôler la pause et la reprise de la lecture.
Par exemple, définissez FramePlayer.enabled = false pour mettre la lecture en pause :
player.enabled = false;
Après la pause, tous les composants AR cessent de fonctionner. Le contenu et la logique d’interaction de la scène peuvent s’arrêter ou non, selon le contenu lui-même. Après reprise, les composants AR reprennent à partir de l’endroit où ils ont été mis en pause.
Arrêter la lecture
Utilisez Stop() pour arrêter la lecture.
player.Stop();
Après l’arrêt, tous les composants AR cessent de fonctionner. Le contenu et la logique d’interaction de la scène peuvent s’arrêter ou non, selon le contenu lui-même.
Aller à un point temporel précis (seek)
Utilisez Seek(double) pour aller à un point temporel précis.
Par exemple, aller 5 secondes plus loin :
player.Seek(player.Time + 5);
Note
Après le saut, la lecture peut ne pas commencer exactement au point temporel indiqué, selon la façon dont le fichier EIF est encodé et l’intervalle entre les images clés.
Tous les fichiers EIF ne prennent pas en charge le seek. Vous pouvez utiliser la propriété IsSeekable pour vérifier si le fichier EIF en cours de lecture prend en charge le seek.
Note
Seuls les fichiers EIF enregistrés au format H264 et arrêtés correctement prennent en charge la lecture avec seek. Si le fichier EIF ne prend pas en charge le seek, appeler Seek(double) n’aura aucun effet.
Contrôle de la vitesse de lecture
Utilisez la propriété Speed pour contrôler la vitesse de lecture.
Par exemple, augmentez la vitesse de lecture de 0.1 par rapport à la valeur initiale :
player.Speed += 0.1;
Tous les fichiers EIF ne prennent pas en charge le contrôle de vitesse. Vous pouvez utiliser la propriété IsSpeedChangeable pour vérifier si le fichier EIF en cours de lecture prend en charge le contrôle de vitesse.
Note
Seuls les fichiers EIF enregistrés au format H264 et arrêtés correctement prennent en charge le contrôle de vitesse. Si le fichier EIF ne le prend pas en charge, définir Speed n’aura aucun effet.
Sujets connexes
- Essayez d’utiliser l’outil de vérification de session ; cet outil inclut un lecteur EIF simple qui permet de simuler l’exécution avec des fichiers EIF encore plus rapidement