Table of Contents

Simular a execução com arquivos EIF no Unity

Este artigo explica como usar arquivos EIF para simular a execução no Unity, permitindo fazer a maior parte do desenvolvimento no computador e ver o resultado de forma intuitiva.

Antes de começar

A simulação usa arquivos EIF como entrada, então antes de começar é necessário gravar um arquivo EIF:

Também é preciso entender:

Ativar o frame player da session

ARSession.AssembleOptions oferece várias formas de configurar a composição dos componentes da session. Uma delas é definir AssembleOptions.FrameSource como FramePlayer para ativar o componente frame player e, assim, usar arquivos EIF para simular a execução.

Por exemplo:

Session.AssembleOptions.FrameSource = AssembleOptions.FrameSourceSelection.FramePlayer;

Você também pode fazer isso no editor selecionando AR Session (EasyAR) e alterando a opção correspondente em Assemble Options na janela Inspector:

alt text

Dessa forma, quando a session iniciar, o componente frame player será ativado em vez de outro componente frame source.

O efeito de reproduzir arquivos EIF com frame player é mostrado no vídeo abaixo:

Este vídeo mostra o efeito de usar frame player para executar mapeamento espacial denso no computador. À esquerda está a view Hierarchy, no centro a view Scene e à direita a view Game. O conteúdo da view Game é o mesmo que o usuário vê no celular no mundo real.

Durante a reprodução do arquivo EIF, todos os componentes AR da session podem funcionar normalmente, assim como o conteúdo da cena e a lógica de interação, permitindo fazer a maior parte do desenvolvimento no computador e ver o resultado de forma intuitiva.

Dica

O efeito visto ao reproduzir EIF com frame player no computador é basicamente o mesmo visto no celular durante a gravação do arquivo EIF.

Importante

O resultado da execução ao reproduzir EIF na cena depende do dispositivo usado na gravação e da frame source escolhida naquele momento. Por isso, ao gravar EIF, recomenda-se usar um dispositivo igual ou próximo do dispositivo alvo, para garantir que o efeito da reprodução seja consistente com o do dispositivo alvo. Também é importante observar se a função de rastreamento de movimento estava ativada na cena gravada. Se ela não estava ativada durante a gravação, também não poderá ser ativada durante a reprodução, e as funções AR que dependem de rastreamento de movimento (por exemplo, mapeamento espacial denso, Mega, etc.) também não funcionarão como no dispositivo.

Reproduzir ao iniciar a session

Por padrão, quando a session inicia, o frame player começa a reproduzir o arquivo EIF automaticamente. Antes da reprodução, porém, é necessário especificar o caminho do arquivo EIF; isso pode ser configurado pelas propriedades FramePlayer.FilePathType e FramePlayer.FilePath.

Por exemplo:

var player = Session.GetComponent<FramePlayer>();
player.FilePathType = WritablePathType.Absolute;
player.FilePath = path;

Você também pode fazer isso no editor selecionando AR Session (EasyAR) e alterando a opção correspondente no componente Frame Player na janela Inspector:

alt text

Se nenhum arquivo for especificado, ou se o caminho do arquivo for inválido, o frame player falhará ao iniciar com a session e exibirá um log de erro:

File not found:

Reprodução manual

Se quiser controlar manualmente quando a reprodução começa, antes de iniciar a session você pode definir FramePlayer.enabled como false:

Session.GetComponent<FramePlayer>().enabled = false;

Você também pode fazer isso no editor selecionando AR Session (EasyAR) e desmarcando Enabled no componente Frame Player na janela Inspector:

alt text

Quando precisar reproduzir, use Play() para iniciar a reprodução.

Por exemplo:

if (Session.Assembly.FrameSource is FramePlayer player)
{
    player.Play();
}

Cada chamada de Play() interrompe a reprodução anterior e começa do início novamente (se já tiver havido reprodução antes).

Cuidado

Ao reproduzir novos dados, os dados existentes na cena não são limpos. O estado dos componentes AR também não é redefinido; eles se comportarão como se os dados da câmera saltassem de repente do ponto em que os dados anteriores pararam para o ponto de início dos novos dados.

Embora isso não afete muito algumas funções, para funções que dependem de rastreamento de movimento (por exemplo, mapeamento espacial denso, Mega, etc.) isso pode causar estados anormais e afetar o resultado da execução. Por isso, recomenda-se reiniciar a session antes de reproduzir novos dados para redefinir o estado de todos os componentes AR.

Pausar e continuar

Use FramePlayer.enabled para controlar a pausa e a retomada da reprodução.

Por exemplo, defina FramePlayer.enabled = false para pausar a reprodução:

player.enabled = false;

Depois que a reprodução é pausada, todos os componentes AR param de funcionar. O conteúdo da cena e a lógica de interação podem ou não parar, dependendo do próprio conteúdo. Ao retomar, os componentes AR continuam a funcionar a partir do ponto de pausa.

Parar a reprodução

Use Stop() para parar a reprodução.

player.Stop();

Depois que a reprodução é parada, todos os componentes AR param de funcionar. O conteúdo da cena e a lógica de interação podem ou não parar, dependendo do próprio conteúdo.

Pular para um ponto de tempo específico (seek)

Use Seek(double) para pular para um ponto de tempo específico.

Por exemplo, pular 5 segundos à frente:

player.Seek(player.Time + 5);
Nota

Após o salto, a reprodução pode não começar exatamente no ponto de tempo indicado, dependendo da forma como o arquivo EIF foi codificado e do intervalo entre keyframes.

Nem todos os arquivos EIF suportam seek. Você pode usar a propriedade IsSeekable para verificar se o arquivo EIF em reprodução suporta seek.

Nota

Somente arquivos EIF gravados no formato H264 e parados corretamente suportam reprodução com seek. Se o arquivo EIF não suportar seek, chamar Seek(double) não terá efeito algum.

Controle de velocidade de reprodução

Use a propriedade Speed para controlar a velocidade de reprodução.

Por exemplo, aumente a velocidade de reprodução em 0.1 em relação ao valor original:

player.Speed += 0.1;

Nem todos os arquivos EIF suportam controle de velocidade. Você pode usar a propriedade IsSpeedChangeable para verificar se o arquivo EIF em reprodução suporta controle de velocidade.

Nota

Somente arquivos EIF gravados no formato H264 e parados corretamente suportam controle de velocidade. Se o arquivo EIF não suportar isso, definir Speed não terá efeito algum.

Tópicos relacionados