Table of Contents

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 :

Il faut aussi comprendre :

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 :

alt text

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 vue Scene et à droite la vue Game. Le contenu de la vue Game est 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 :

alt text

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 :

alt text

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