Table of Contents

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:

Además, también conviene entender:

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:

alt text

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

alt text

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:

alt text

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