Simular la ejecución con archivos EIF en Unity
Este artículo explica cómo usar archivos EIF para simular la ejecución en Unity, de modo que puedas hacer la mayor parte del desarrollo en el ordenador y ver el resultado de forma intuitiva.
Antes de empezar
La simulación usa archivos EIF como entrada, así que antes de empezar primero hay que grabar un archivo EIF:
- Consulta Grabar archivo EIF para grabar un archivo EIF
Además, también conviene entender:
- Entender los conceptos básicos de grabar un archivo EIF y usarlo para simulación
- Entender los conceptos básicos, la composición y el flujo de trabajo de AR Session
- Aprender cómo acceder al componente de grabación mediante acceder a los componentes AR de la session
Activar frame player de la session
ARSession.AssembleOptions ofrece varias formas de configurar la composición de los componentes de la session. Una de ellas es establecer AssembleOptions.FrameSource en FramePlayer para activar el componente frame player y así poder usar archivos EIF para simular la ejecución.
Por ejemplo:
Session.AssembleOptions.FrameSource = AssembleOptions.FrameSourceSelection.FramePlayer;
También puedes hacerlo en el editor: selecciona AR Session (EasyAR) y modifica la opción correspondiente en Assemble Options dentro de la ventana Inspector:

Así, cuando la session se inicie, se activará el componente frame player en lugar de seleccionar otro componente frame source.
El efecto de reproducir archivos EIF con frame player se muestra en el siguiente video:
Este video muestra el efecto de usar frame player para ejecutar mapeo espacial denso en el ordenador. A la izquierda está la vista
Hierarchy, en el centro la vistaSceney a la derecha la vistaGame. El contenido de la vistaGamees el mismo que ve el usuario en el teléfono en el mundo real.
Durante la reproducción del archivo EIF, todos los componentes AR de la session pueden funcionar con normalidad, y también pueden funcionar el contenido de la escena y la lógica de interacción, de modo que puedas hacer la mayor parte del desarrollo en el ordenador y ver el resultado de forma intuitiva.
Consejo
El efecto que ves al reproducir EIF con frame player en el ordenador es básicamente el mismo que en el teléfono durante la grabación del archivo EIF.
Importante
El resultado de ejecución al reproducir EIF en la escena depende del dispositivo usado para grabar y de la frame source elegida en ese momento. Por eso, al grabar EIF, se recomienda usar un dispositivo igual o parecido al dispositivo objetivo, para garantizar que el efecto de reproducción sea consistente con el del dispositivo objetivo. También hay que prestar especial atención a si la función de seguimiento de movimiento estaba activada en la escena grabada. Si no estaba activada durante la grabación, tampoco podrá activarse durante la reproducción, y las funciones AR que dependen del seguimiento de movimiento (por ejemplo, el mapa espacial denso, Mega, etc.) tampoco funcionarán igual que en el dispositivo.
Reproducir al iniciar la session
De forma predeterminada, cuando la session se inicia, frame player comienza a reproducir el archivo EIF automáticamente. Antes de la reproducción, sin embargo, es necesario especificar la ruta del archivo EIF; esto puede configurarse mediante FramePlayer.FilePathType y FramePlayer.FilePath.
Por ejemplo:
var player = Session.GetComponent<FramePlayer>();
player.FilePathType = WritablePathType.Absolute;
player.FilePath = path;
También puedes hacerlo en el editor: selecciona AR Session (EasyAR) y modifica la opción correspondiente en el componente Frame Player dentro de la ventana Inspector:

Si no se especifica ningún archivo, o si la ruta del archivo no es válida, frame player fallará al iniciarse junto con la session y mostrará un registro de error:
File not found:
Reproducción manual
Si quieres controlar manualmente cuándo empezar a reproducir, antes de iniciar la session puedes poner FramePlayer.enabled en false:
Session.GetComponent<FramePlayer>().enabled = false;
También puedes hacerlo en el editor: selecciona AR Session (EasyAR) y desmarca Enabled del componente Frame Player en la ventana Inspector:

Cuando necesites reproducir, usa Play() para empezar la reproducción.
Por ejemplo:
if (Session.Assembly.FrameSource is FramePlayer player)
{
player.Play();
}
Cada llamada a Play() detendrá la reproducción anterior y volverá a empezar desde el principio (si ya se había reproducido antes).
Precaución
Al reproducir nuevos datos, los datos existentes en la escena no se borran. El estado de los componentes AR tampoco se reinicia; se comportarán como si los datos de la cámara saltaran de repente desde el punto en que se detuvieron los datos anteriores al punto de inicio de los nuevos datos.
Aunque esto no afecta mucho a algunas funciones, para las funciones que dependen del seguimiento de movimiento (por ejemplo, el mapa espacial denso, Mega, etc.) puede provocar estados anómalos y afectar al resultado de ejecución. Por eso se recomienda reiniciar la session antes de reproducir nuevos datos para restablecer el estado de todos los componentes AR.
Pausar y continuar
Usa FramePlayer.enabled para controlar la pausa y la continuación de la reproducción.
Por ejemplo, establece FramePlayer.enabled = false para pausar la reproducción:
player.enabled = false;
Después de pausar la reproducción, todos los componentes AR dejarán de funcionar. El contenido y la lógica de interacción de la escena pueden o no detenerse, dependiendo del propio contenido. Al reanudar la reproducción, los componentes AR continuarán desde donde se pausaron.
Detener la reproducción
Usa Stop() para detener la reproducción.
player.Stop();
Después de detener la reproducción, todos los componentes AR dejarán de funcionar. El contenido y la lógica de interacción de la escena pueden o no detenerse, dependiendo del propio contenido.
Reproducir saltando a un punto de tiempo específico (seek)
Usa Seek(double) para saltar a un punto de tiempo específico.
Por ejemplo, saltar 5 segundos hacia adelante:
player.Seek(player.Time + 5);
Nota
Después del salto, la reproducción puede no empezar exactamente en el punto de tiempo indicado, dependiendo de cómo esté codificado el archivo EIF y del intervalo entre fotogramas clave.
No todos los archivos EIF admiten reproducción con salto. Puedes usar la propiedad IsSeekable para comprobar si el archivo EIF que se está reproduciendo admite seek.
Nota
Solo los archivos EIF grabados con el formato H264 y detenidos correctamente admiten reproducción con salto. Si el archivo EIF no la admite, llamar a Seek(double) no tendrá ningún efecto.
Control de velocidad de reproducción
Usa la propiedad Speed para controlar la velocidad de reproducción.
Por ejemplo, aumenta la velocidad de reproducción en 0.1x respecto al valor original:
player.Speed += 0.1;
No todos los archivos EIF admiten control de velocidad. Puedes usar la propiedad IsSpeedChangeable para comprobar si el archivo EIF que se está reproduciendo admite este control.
Nota
Solo los archivos EIF grabados con el formato H264 y detenidos correctamente admiten control de velocidad. Si el archivo EIF no lo admite, establecer Speed no tendrá ningún efecto.
Temas relacionados
- Prueba usar la herramienta de verificación de session; esta herramienta incluye un reproductor EIF sencillo que permite usar archivos EIF para simular la ejecución de forma más rápida