Table of Contents

Usando arquivos EIF para simulação no Unity

Este artigo introduz como usar arquivos EIF para simulação no Unity, permitindo que a maior parte do desenvolvimento seja feita no computador com visualização direta dos resultados.

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 é necessário entender:

Habilitar o frame player da sessão

ARSession.AssembleOptions oferece várias formas de configurar a combinação de componentes da sessão. Uma delas é definir AssembleOptions.FrameSource como FramePlayer para habilitar o componente frame player, permitindo usar arquivos EIF para simulação.

Por exemplo:

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

Também é possível no editor, selecionar AR Session (EasyAR), e modificar a opção correspondente em Assemble Options na janela Inspector:

alt text

Assim, quando a sessão iniciar, o componente frame player será habilitado, sem selecionar outros componentes frame source.

O efeito de reproduzir um arquivo EIF com o frame player é mostrado neste vídeo:

Este vídeo demonstra o mapeamento espacial denso em movimento usando o frame player no computador. À esquerda está a visualização Hierarchy, no meio a visualização Scene, e à direita a visualização Game. O conteúdo da visualização Game é o mesmo que o usuário veria no mundo real com um celular.

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 a maior parte do desenvolvimento seja feita no computador com visualização direta dos resultados.

Dica

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

Importante

O efeito de execução ao reproduzir um EIF na cena depende do dispositivo usado na gravação e do frame source selecionado naquele momento. Portanto, ao gravar arquivos EIF, recomenda-se usar um dispositivo igual ou similar ao dispositivo alvo, garantindo consistência de efeitos. Também é crucial verificar se o rastreamento de movimento estava habilitado durante a gravação. Se não estava habilitado, não será possível habilitá-lo durante a reprodução, e funcionalidades AR que dependem de rastreamento de movimento (como mapa espacial denso, Mega, etc.) não funcionarão como no 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. Porém, antes de reproduzir, o caminho do arquivo EIF precisa ser especificado através das propriedades FramePlayer.FilePathType e FramePlayer.FilePath.

Por exemplo:

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

Também é possível no editor, selecionar AR Session (EasyAR), e modificar as opções correspondentes no componente Frame Player na janela Inspector:

alt text

Se o arquivo não for especificado ou o caminho for inválido, o frame player falhará ao iniciar com a sessão e registrará um erro:

File not found:

Reprodução manual

Para controlar manualmente o momento da reprodução, defina FramePlayer.enabled como false antes de iniciar a sessão,

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

Também é possível no editor, selecionar AR Session (EasyAR), e desmarcar Enabled no componente Frame Player na janela Inspector:

alt text

Quando necessário, 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 (se houver) e recomeça do início.

Cuidado

Ao reproduzir novos dados, os dados originais na cena não são limpos. O estado dos componentes AR também não é redefinido, eles se comportam como se os dados da câmera tivessem saltado abruptamente do ponto de parada dos dados anteriores para o início dos novos dados.

Embora isso não afete algumas funcionalidades, pode causar estados anormais em funcionalidades que dependem de rastreamento de movimento (como mapa espacial denso, Mega, etc.), impactando os resultados. Portanto, recomenda-se 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;

Quando pausada, todos os componentes de funcionalidade AR param de funcionar. Conteúdos e lógicas de interação na cena podem não parar, dependendo do conteúdo. Ao continuar, os componentes de funcionalidade AR retomam do ponto de pausa.

Parar reprodução

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

player.Stop();

Quando parada, todos os componentes de funcionalidade AR param de funcionar. Conteúdos e lógicas de interação na cena podem não parar, dependendo do conteúdo.

Pular para um ponto específico (seek)

Use Seek(double) para pular para um ponto específico na reprodução.

Por exemplo, pular para 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 especificado, dependendo da codificação do arquivo EIF e do intervalo de quadros-chave.

Nem todos os arquivos EIF suportam seek. Use a propriedade IsSeekable para verificar se o arquivo EIF atual suporta seek.

Nota

Apenas arquivos EIF gravados no formato H264 com parada normal de gravação suportam seek. Se o arquivo EIF não suportar seek, 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 em 0.1x:

player.Speed += 0.1;

Nem todos os arquivos EIF suportam controle de velocidade. Use a propriedade IsSpeedChangeable para verificar se o arquivo EIF atual suporta controle de velocidade.

Nota

Apenas arquivos EIF gravados no formato H264 com parada normal de gravação suportam controle de velocidade. Se o arquivo EIF não suportar controle de velocidade, definir Speed não terá efeito.

Tópicos relacionados