Table of Contents

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:

También necesitas comprender:

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:

alt text

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 vista Scene, y a la derecha la vista Game. El contenido de la vista Game es 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:

alt text

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:

alt text

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