Usando arquivos EIF para simulação no Unity
Este artigo explica como usar arquivos EIF para simulação no Unity, permitindo que você faça a maior parte do desenvolvimento no computador e veja os resultados visualmente.
Antes de começar
A simulação usa arquivos EIF como entrada, portanto, antes de começar, você precisa gravar um arquivo EIF:
- Consulte Gravar arquivo EIF para gravar um arquivo EIF
Você também precisa entender:
- Os conceitos básicos de Gravar arquivo EIF e usar para simulação
- Os conceitos básicos, componentes e fluxo de trabalho de uma Sessão AR
- Como acessar componentes de gravação através de Acessar componentes de funcionalidade AR na sessão
Habilitar o frame player na sessão
ARSession.AssembleOptions oferece várias maneiras de configurar como os componentes da sessão são combinados. Uma delas é definir AssembleOptions.FrameSource como FramePlayer para habilitar o componente frame player, permitindo o uso de arquivos EIF para simulação.
Por exemplo:
Session.AssembleOptions.FrameSource = AssembleOptions.FrameSourceSelection.FramePlayer;
Você também pode, no editor, selecionar AR Session (EasyAR), e na janela Inspector, modificar a opção correspondente em Assemble Options:

Assim, quando a sessão iniciar, o componente frame player será habilitado, e nenhum outro componente frame source será selecionado.
O efeito de reproduzir um arquivo EIF usando o frame player é mostrado neste vídeo:
Este vídeo mostra o efeito de usar o frame player para mapeamento denso de espaço em movimento no computador. À esquerda está a visualização
Hierarchy, no meio a visualizaçãoScene, e à direita a visualizaçãoGame. O conteúdo da visualizaçãoGameé o mesmo que o usuário veria no mundo real com um telefone.
Durante a reprodução do arquivo EIF, todos os componentes de funcionalidade AR na sessão funcionam normalmente, os conteúdos e lógicas de interação na cena também funcionam, permitindo que você faça a maior parte do desenvolvimento no computador e veja os resultados visualmente.
Dica
O efeito visto ao reproduzir um arquivo EIF no computador usando o frame player é basicamente consistente com o efeito no telefone durante a gravação do arquivo EIF.
Importante
O efeito de execução durante a reprodução do EIF na cena está relacionado ao dispositivo usado na gravação e à fonte de quadros (frame source) selecionada no dispositivo naquele momento. Portanto, ao gravar arquivos EIF, é recomendável usar um dispositivo igual ou semelhante ao dispositivo de destino para garantir que o efeito durante a reprodução seja consistente com o efeito no dispositivo de destino. Além disso, preste atenção especial se o rastreamento de movimento estava habilitado na cena de gravação. Se o rastreamento de movimento não estava habilitado durante a gravação, ele não poderá ser habilitado durante a reprodução, e as funcionalidades AR que dependem do rastreamento de movimento (como mapa de espaço denso, Mega, etc.) também não funcionarão de forma consistente com o dispositivo.
Reproduzir ao iniciar a sessão
Por padrão, o frame player inicia automaticamente a reprodução do arquivo EIF quando a sessão é iniciada. No entanto, antes da reprodução, o caminho do arquivo EIF precisa ser especificado. Isso pode ser feito usando as propriedades FramePlayer.FilePathType e FramePlayer.FilePath.
Por exemplo:
var player = Session.GetComponent<FramePlayer>();
player.FilePathType = WritablePathType.Absolute;
player.FilePath = path;
Você também pode, no editor, selecionar AR Session (EasyAR), e na janela Inspector, modificar as opções correspondentes no componente Frame Player:

Se o arquivo não for especificado ou o caminho for inválido, o frame player falhará ao iniciar quando a sessão for iniciada e registrará um erro:
File not found:
Reprodução manual
Se você quiser controlar manualmente o momento da reprodução, pode definir FramePlayer.enabled como false antes de iniciar a sessão,
Session.GetComponent<FramePlayer>().enabled = false;
Você também pode, no editor, selecionar AR Session (EasyAR), e na janela Inspector, desmarcar Enabled no componente Frame Player:

Quando quiser reproduzir, use Play() para iniciar a reprodução.
Por exemplo:
if (Session.Assembly.FrameSource is FramePlayer player)
{
player.Play();
}
Cada chamada para Play() interromperá a reprodução anterior (se houver) e começará a reprodução desde o início.
Cuidado
Ao reproduzir novos dados, os dados originais na cena não serão limpos. O estado dos componentes AR também não será redefinido. Eles se comportarão como se os dados da câmera tivessem parado abruptamente no ponto anterior e saltado para o início dos novos dados.
Embora isso não tenha grande impacto em algumas funcionalidades, para funcionalidades que dependem do rastreamento de movimento (como mapa de espaço denso, Mega, etc.), isso pode causar estados anormais, afetando o efeito de execução. Portanto, é recomendável reiniciar a sessão 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 continuação da reprodução.
Por exemplo, defina FramePlayer.enabled = false para pausar a reprodução:
player.enabled = false;
Após pausar a reprodução, todos os componentes de funcionalidade AR pararão de funcionar. Os conteúdos e lógicas de interação na cena podem não parar, dependendo do próprio conteúdo. Ao continuar a reprodução, os componentes de funcionalidade AR retomam o trabalho do ponto onde pausaram.
Parar a reprodução
Use Stop() para parar a reprodução.
player.Stop();
Após parar a reprodução, todos os componentes de funcionalidade AR pararão de funcionar. Os conteúdos e lógicas de interação na cena podem não parar, dependendo do próprio conteúdo.
Avançar para um ponto específico (seek)
Use Seek(double) para avançar para um ponto de tempo específico na reprodução.
Por exemplo, avançar 5 segundos:
player.Seek(player.Time + 5);
Nota
Após avançar, a reprodução pode não começar exatamente no ponto de tempo especificado, dependendo do método de codificação do arquivo EIF e do intervalo de quadros-chave.
Nem todos os arquivos EIF suportam avanço. Você pode usar a propriedade IsSeekable para verificar se o arquivo EIF atualmente em reprodução suporta avanço.
Nota
Apenas arquivos EIF gravados no formato H264 e com a gravação interrompida normalmente suportam avanço. Se o arquivo EIF não suportar avanço, chamar Seek(double) não terá efeito.
Controle de velocidade de reprodução
Use a propriedade Speed para controlar a velocidade de reprodução.
Por exemplo, aumentar a velocidade de reprodução em 0.1x:
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 atualmente em reprodução suporta controle de velocidade.
Nota
Apenas arquivos EIF gravados no formato H264 e com a gravação interrompida normalmente suportam controle de velocidade. Se o arquivo EIF não suportar controle de velocidade, definir Speed não terá efeito.
Tópicos relacionados
- Experimente a Ferramenta de verificação de sessão. Esta ferramenta inclui um reprodutor de EIF simples, permitindo que você use arquivos EIF para simulação de forma mais rápida.