Gravando arquivos EIF no unity
Este artigo descreve como gravar arquivos EIF no unity para uso em simulação.
Antes de começar
- Compreender os conceitos básicos de gravando arquivos EIF e usando-os para simulação
- Compreender os conceitos básicos, componentes e fluxo de trabalho de sessão AR
- Compreender como acessar componentes de gravação por meio de acessando componentes de funcionalidade AR na sessão
Iniciando a gravação
Use FrameRecorder.enabled = true para iniciar a gravação, por exemplo:
if (Session.State >= ARSession.SessionState.Ready && Session.Assembly.FrameRecorder.OnSome)
{
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.enabled = true;
}
Observe que é necessário verificar primeiro se ARAssembly.FrameRecorder existe.
Nota
ARAssembly.FrameRecorder não pode ser usado em alguns casos, como quando se usa FramePlayer.
FrameRecorder.enabled é false por padrão, o que significa que a gravação está desativada. Mesmo se configurado manualmente no editor, será ineficaz.
A gravação começará durante a execução da sessão quando FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready.
Se FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready, você pode usar o evento OnReady para aguardar até que a gravação esteja pronta.
Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
// Pode começar a gravar
});
Você pode usar o evento OnRecording para confirmar o sucesso da inicialização:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Gravação iniciada: {file}");
});
Falhas na inicialização não disparam eventos, mas você pode verificar se FrameRecorder.Status é Error para confirmar.
Importante
O efeito de execução ao reproduzir EIF na cena está relacionado ao dispositivo usado durante a gravação e à fonte de quadros escolhida naquele momento. Portanto, ao gravar arquivos EIF, recomenda-se usar o mesmo dispositivo ou um dispositivo semelhante ao alvo para garantir consistência durante a reprodução. Também é necessário focar em verificar se o rastreamento de movimento está ativado na cena gravada. Se não estiver ativado durante a gravação, também não poderá ser ativado durante a reprodução, e funcionalidades AR que dependem de rastreamento de movimento (como mapas espaciais densos, Mega, etc.) não funcionarão de forma consistente com o dispositivo.
Parando a gravação
Use FrameRecorder.enabled = false para parar a gravação, por exemplo:
frameRecorder.enabled = false;
Essa ação interrompe a gravação imediatamente e bloqueia até que o arquivo seja gravado completamente.
Importante
Você deve chamar parar gravação, caso contrário, o arquivo gravado estará incompleto, o que pode causar falhas em partes ou na totalidade das funcionalidades:
Armazenamento e exportação de arquivos
Você pode usar o evento OnRecording para obter o caminho completo real do arquivo gravado:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Gravação iniciada: {file}");
});
Por padrão, os arquivos gravados são armazenados no caminho de dados persistentes do aplicativo, que pode ser acessado via Application.persistentDataPath.
Você pode alterar o caminho de armazenamento via FrameRecorder.Configuration.FilePath. Este caminho deve ser definido antes de iniciar a gravação e só terá efeito após AutoFilePath ser desativado. O diretório deve ser criado antecipadamente.
Importante
Você deve garantir que o diretório de armazenamento do arquivo gravado exista e que o aplicativo tenha permissão de escrita, caso contrário, a gravação falhará ao iniciar.
Por exemplo, o código a seguir mostra como armazenar o arquivo gravado em um diretório personalizado e gerar um nome de arquivo com base no tipo de FrameSource usado pela sessão e na hora atual:
if (!Directory.Exists(SavePath))
{
Directory.CreateDirectory(SavePath);
}
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.Configuration.AutoFilePath = false;
frameRecorder.Configuration.FilePath.Type = WritablePathType.Absolute;
frameRecorder.Configuration.FilePath.FolderPath = SavePath;
frameRecorder.Configuration.FilePath.FileName = ARSessionFactory.DefaultName(Session.Assembly.FrameSource.GetType()).Replace(" ", "") + DateTime.Now.ToString("_yyyy-MM-dd_HH-mm-ss.fff");
frameRecorder.enabled = true;
Você também pode, no editor, selecionar AR Session (EasyAR), desmarcar Auto File Path em Frame Recorder na janela Inspector e configurar:

Dica
Através de FrameRecorder.RecordingConfiguration.FilePath você pode modificar o diretório de armazenamento e o nome do arquivo (sem extensão). A extensão do arquivo será adicionada automaticamente com base no formato de gravação.
Se o arquivo estiver armazenado no caminho de dados persistentes do aplicativo ou em outro caminho privado, você pode exportá-lo para o computador das seguintes maneiras:
- Na plataforma Android, conecte-se ao computador via USB e use
adb pullou outro método para exportar o arquivo. Normalmente, o arquivo está em/sdcard/Android/data/<app package name>/files. - Na plataforma iOS, você pode exportar o arquivo para o computador através da janela Devices do Xcode, ou acessar o diretório privado do aplicativo via iTunes ou compartilhamento de arquivos do Finder.
- Através de código, armazene o arquivo em um diretório público, como o diretório de downloads do Android ou o álbum de fotos do iOS.
Nota
Para aplicativos iOS, se você deseja acessar o diretório privado do aplicativo via iTunes ou compartilhamento de arquivos do Finder, é necessário adicionar a chave UIFileSharingEnabled ao Info.plist do projeto Xcode antes do empacotamento e definir o valor como YES:

O texto exibido após a adição pode ser diferente da string adicionada, o que é normal.
Alterando o formato de gravação
Altere o formato de gravação via FrameRecorder.Configuration.Format. Deve ser definido antes de iniciar a gravação.
Por exemplo, o código a seguir mostra como definir o formato de gravação como H264:
frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;
Você também pode, no editor, selecionar AR Session (EasyAR), modificar Format na janela Inspector:

Nota
H264 não pode ser usado em alguns dispositivos (como Windows). Geralmente, recomenda-se usar Auto, que escolherá o formato adequado automaticamente com base no dispositivo.
Nota
No XREAL, dados gravados no formato Obsolete não podem ser usados para simulação, sendo usados apenas para relatar problemas.
Você pode usar RecordingFormat para verificar o formato de gravação atual.
Gravação automática ao iniciar a sessão
Defina AutoStart como true antes de iniciar a sessão para iniciar a gravação quando a sessão for iniciada, por exemplo:
frameRecorder.AutoStart = true;
Você também pode, no editor, selecionar AR Session (EasyAR), marcar Auto Start em Frame Recorder na janela Inspector:

Nota
Modificar FrameRecorder.enabled no editor é ineficaz.
Dados utilizáveis com mega
Ao usar Mega, existem requisitos especiais para o conteúdo do arquivo EIF e arquivos relacionados. Em versões antigas do plug-in Unity, essa funcionalidade não foi integrada, então os dados gravados nessas versões não podem ser usados com Mega.
Os dados gravados nas seguintes situações podem ser usados com Mega:
- Dados gravados com Unity plug-in versão 4000 ou superior
- Dados gravados com Mega Toolbox
- Se os dados foram gravados no formato Obsolete, por exemplo, arquivo
x.eif, é necessário que o arquivox.eif.jsonexista no mesmo diretório para que possa ser usado
Os dados gravados nas seguintes situações não podem ser usados com Mega:
- Dados gravados com Unity plug-in versão 4.6 ou inferior
- Dados gravados com EasyAR Sense nativo e sem adicionar o mesmo conteúdo presente no plug-in Unity
Além disso, embora o Mega possa funcionar sem rastreamento de movimento, o efeito de execução é diferente. Recomenda-se ativar o rastreamento de movimento ao gravar arquivos EIF para garantir que o efeito durante a reprodução atenda à maioria dos cenários de uso.
Próximos passos
- Experimente usando arquivos EIF para simulação
- Experimente usando a ferramenta de validação de sessão