Simular ejecución usando archivos EIF en Unity
Este artículo explica cómo usar archivos EIF en Unity para simular ejecución, permitiendo realizar la mayor parte del desarrollo en la computadora y ver los efectos visualmente.
Antes de comenzar
La simulación usa archivos EIF como entrada, por lo que antes de comenzar necesitas grabar un archivo EIF:
- Consulta Grabar archivos EIF para grabar un archivo EIF
También necesitas comprender:
- Los conceptos básicos de Grabar archivos EIF y usarlos para simulación
- Los conceptos básicos, composición y flujo de trabajo de AR Session
- Cómo acceder al componente de grabación mediante Acceder a componentes de funciones AR en la sesión
Habilitar el frame player de la sesión
ARSession.AssembleOptions proporciona múltiples formas de configurar la combinación de componentes de la sesión. Una forma es establecer AssembleOptions.FrameSource en FramePlayer para habilitar el componente frame player, permitiendo usar archivos EIF para simulación.
Por ejemplo:
Session.AssembleOptions.FrameSource = AssembleOptions.FrameSourceSelection.FramePlayer;
También puedes, en el editor, seleccionar AR Session (EasyAR), y en la ventana Inspector modificar la opción correspondiente en Assemble Options:

Así, cuando la sesión se inicie, se habilitará el componente frame player y no se seleccionarán otros componentes frame source.
El efecto de reproducir un archivo EIF con frame player se muestra en este video:
Este video muestra el efecto de usar frame player para mapeo espacial denso en movimiento en una computadora. A la izquierda está la vista
Hierarchy, en el centro la vistaScene, y a la derecha la vistaGame. El contenido de la vistaGamees idéntico a lo que el usuario vería en el mundo real con un teléfono.
Durante la reproducción del archivo EIF, todos los componentes de funciones AR en la sesión pueden funcionar normalmente, y los contenidos y lógicas interactivas en la escena también funcionan, permitiendo realizar la mayor parte del desarrollo en la computadora y ver los efectos visualmente.
Consejo
El efecto visto al reproducir un archivo EIF con frame player en la computadora es básicamente consistente con el efecto en el teléfono durante la grabación.
Importante
El efecto de ejecución al reproducir EIF en la escena está relacionado con el dispositivo usado para grabar y el frame source seleccionado en ese dispositivo en ese momento. Por lo tanto, al grabar archivos EIF, se recomienda usar un dispositivo idéntico o similar al dispositivo objetivo, para garantizar que el efecto durante la reproducción sea consistente con el efecto en el dispositivo objetivo. También es crucial verificar si la función de seguimiento de movimiento estaba habilitada durante la grabación. Si no estaba habilitada durante la grabación, tampoco podrá habilitarse durante la reproducción, y las funciones AR que dependen del seguimiento de movimiento (como el mapa espacial denso, Mega, etc.) no funcionarán de manera consistente con el dispositivo.
Reproducir al iniciar la sesión
Por defecto, cuando la sesión se inicia, el frame player comienza automáticamente a reproducir el archivo EIF. Sin embargo, antes de reproducir, se debe especificar la ruta del archivo EIF, lo cual se puede hacer mediante las propiedades FramePlayer.FilePathType y FramePlayer.FilePath.
Por ejemplo:
var player = Session.GetComponent<FramePlayer>();
player.FilePathType = WritablePathType.Absolute;
player.FilePath = path;
También puedes, en el editor, seleccionar AR Session (EasyAR), y en la ventana Inspector modificar las opciones correspondientes en el componente Frame Player:

Si no se especifica un archivo, o la ruta es inválida, el frame player fallará al iniciar la sesión y registrará un error:
File not found:
Reproducción manual
Si deseas controlar manualmente el momento de la reproducción, puedes establecer FramePlayer.enabled en false antes de iniciar la sesión,
Session.GetComponent<FramePlayer>().enabled = false;
También puedes, en el editor, seleccionar AR Session (EasyAR), y en la ventana Inspector desmarcar Enabled en el componente Frame Player:

Cuando necesites reproducir, usa Play() para iniciar la reproducción.
Por ejemplo:
if (Session.Assembly.FrameSource is FramePlayer player)
{
player.Play();
}
Cada llamada a Play() detendrá la reproducción anterior (si había una) y comenzará desde el principio.
Precaución
Al reproducir nuevos datos, los datos existentes en la escena no se borrarán. El estado de los componentes AR no se restablecerá; se comportarán como si los datos de la cámara saltaran repentinamente desde donde terminaron los datos anteriores hasta donde comienzan los nuevos datos.
Aunque esto no afecta mucho a algunas funciones, para funciones que dependen del seguimiento de movimiento (como el mapa espacial denso, Mega, etc.), puede causar estados anormales y afectar el efecto de ejecución. Por lo tanto, se recomienda reiniciar la sesión 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 continuación de la reproducción.
Por ejemplo, establece FramePlayer.enabled = false para pausar la reproducción:
player.enabled = false;
Al pausar la reproducción, todos los componentes de funciones AR detienen su trabajo. Los contenidos y lógicas interactivas en la escena no necesariamente se detienen, depende del contenido en sí. Al continuar la reproducción, los componentes de funciones AR continuarán trabajando desde el punto de pausa.
Detener la reproducción
Usa Stop() para detener la reproducción.
player.Stop();
Al detener la reproducción, todos los componentes de funciones AR detienen su trabajo. Los contenidos y lógicas interactivas en la escena no necesariamente se detienen, depende del contenido en sí.
Saltar a un punto temporal específico para reproducir (seek)
Usa Seek(double) para saltar a un punto temporal específico y reproducir desde allí.
Por ejemplo, saltar 5 segundos hacia adelante:
player.Seek(player.Time + 5);
Nota
Después de saltar, es posible que la reproducción no comience exactamente en el punto temporal especificado, dependiendo de la codificación del archivo EIF y del intervalo de fotogramas clave.
No todos los archivos EIF admiten saltos durante la reproducción. Puedes usar la propiedad IsSeekable para verificar si el archivo EIF que se está reproduciendo admite saltos.
Nota
Solo los archivos EIF grabados en formato H264 y que finalizaron la grabación llamando correctamente a la función de detención admiten saltos. Si el archivo EIF no admite saltos, llamar a Seek(double) no tendrá efecto.
Control de velocidad de reproducción
Usa la propiedad Speed para controlar la velocidad de reproducción.
Por ejemplo, aumentar la velocidad de reproducción en 0.1 veces:
player.Speed += 0.1;
No todos los archivos EIF admiten cambios de velocidad. Puedes usar la propiedad IsSpeedChangeable para verificar si el archivo EIF que se está reproduciendo admite cambios de velocidad.
Nota
Solo los archivos EIF grabados en formato H264 y que finalizaron la grabación llamando correctamente a la función de detención admiten cambios de velocidad. Si el archivo EIF no admite cambios de velocidad, establecer Speed no tendrá efecto.
Temas relacionados
- Prueba Usar la herramienta de validación de sesión, que incluye un reproductor EIF simple para usar archivos EIF en simulación de manera más rápida