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:
- Consulte Gravar arquivo EIF para gravar um arquivo EIF
Também é preciso entender:
- Entender os conceitos básicos de gravar um arquivo EIF e usá-lo para simulação
- Entender os conceitos básicos, a composição e o fluxo de trabalho de AR Session
- Entender como acessar o componente de gravação por meio de acessar os componentes AR da session
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:

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 viewScenee à direita a viewGame. O conteúdo da viewGameé 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:

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:

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
- Tente usar a ferramenta de verificação de session; essa ferramenta inclui um player EIF simples que permite usar arquivos EIF para simular a execução ainda mais rápido