Gravar arquivos EIF no Unity
Este artigo explica como gravar arquivos EIF no Unity para usá-los na simulação.
Antes de começar
- 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
Iniciar 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;
}
É preciso primeiro verificar se ARAssembly.FrameRecorder existe.
Nota
ARAssembly.FrameRecorder não pode ser usado em alguns casos, por exemplo ao usar FramePlayer.
O valor padrão de FrameRecorder.enabled é false, o que significa que a gravação está desativada; mesmo que seja configurado manualmente no editor, isso não terá efeito.
A gravação só começará quando, durante a execução da session, FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready.
Se FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready, você pode usar o evento OnReady para aguardar a gravação ficar pronta.
Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
// A gravação pode começar
});
Você pode usar o evento OnRecording para confirmar que a inicialização foi bem-sucedida:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
Se a inicialização falhar, nenhum evento será disparado, mas você pode verificar se FrameRecorder.Status é Error para confirmar.
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.
Parar a gravação
Use FrameRecorder.enabled = false para parar a gravação, por exemplo:
frameRecorder.enabled = false;
Essa operação para a gravação imediatamente e bloqueia até que a escrita do arquivo seja concluída.
Importante
Você deve chamar a parada da gravação; caso contrário, o arquivo gravado ficará incompleto e algumas funções ou até o arquivo inteiro não poderão ser usados:
Armazenamento e exportação de arquivos
Você pode usar o evento OnRecording para obter o caminho real completo do arquivo gravado:
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
Com a configuração padrão, o arquivo gravado é salvo no persistent data path do aplicativo, acessível por meio de Application.persistentDataPath.
Você pode alterar o caminho de armazenamento com FrameRecorder.Configuration.FilePath. Esse caminho deve ser definido antes do início da gravação e só terá efeito depois que AutoFilePath for desativado. O diretório precisa ser criado com antecedência.
Importante
O diretório de armazenamento do arquivo gravado deve existir e ser gravável pelo aplicativo, 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 o nome do arquivo com base no tipo de FrameSource usado pela session e no horário 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 configurar isso no editor: selecione AR Session (EasyAR) e, na janela Inspector, desmarque Auto File Path em Frame Recorder e configure o restante:

Dica
Você pode alterar o diretório de armazenamento e o nome do arquivo (sem extensão) por meio de FrameRecorder.RecordingConfiguration.FilePath; a extensão do arquivo é adicionada automaticamente de acordo com o formato de gravação.
Se o arquivo for salvo no persistent data path do aplicativo ou em outro caminho privado, você pode exportá-lo para o computador das seguintes formas:
- No Android, conecte o dispositivo ao computador via USB e use
adb pullou outro método para exportar o arquivo; normalmente ele fica em/sdcarad/Android/data/<app package name>/files. - No iOS, use a janela Devices do Xcode para exportar o arquivo para o computador, ou acesse o diretório privado do aplicativo via compartilhamento de arquivos do iTunes ou Finder.
- Salve o arquivo em um diretório público por código, por exemplo a pasta Downloads no Android ou Fotos no iOS.
Nota
Para apps iOS, se você quiser acessar o diretório privado do aplicativo via compartilhamento de arquivos do iTunes ou Finder, antes do empacotamento é necessário adicionar a chave UIFileSharingEnabled ao Info.plist do projeto Xcode e defini-la como YES:

O texto exibido depois da adição é diferente da string digitada; isso é normal.
Alterar o formato de gravação
Altere o formato de gravação por meio de FrameRecorder.Configuration.Format, e isso deve ser configurado antes de iniciar a gravação.
Por exemplo, o código abaixo força o formato de gravação para H264:
frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;
Você também pode configurá-lo no editor: selecione AR Session (EasyAR) e altere Format na janela Inspector:

Nota
H264 não pode ser usado em alguns dispositivos (por exemplo Windows); normalmente é recomendado usar Auto, que escolhe automaticamente o formato adequado ao dispositivo.
Nota
No XREAL, dados gravados com o formato Obsolete não podem ser usados para simular a execução; esse formato deve ser usado apenas para reportar problemas.
Você pode usar RecordingFormat para ver o formato de gravação atual.
Gravação automática ao iniciar a session
Se você definir AutoStart como true antes de iniciar a session, a gravação começará quando a session iniciar, por exemplo:
frameRecorder.AutoStart = true;
Você também pode fazer isso no editor: selecione AR Session (EasyAR) e marque Auto Start em Frame Recorder:

Nota
Alterar FrameRecorder.enabled no editor não tem efeito.
Dados utilizáveis para Mega
Ao usar Mega, existem alguns requisitos especiais para EIF e arquivos relacionados. Em versões antigas do plugin Unity, esses recursos não estavam integrados, e os dados gravados com essas versões não podem ser usados com Mega.
Os dados gravados podem ser usados com Mega nos seguintes casos:
- Dados gravados com Unity Plugin versão 4000 ou superior
- Dados gravados com Mega Toolbox
- Se os dados foram gravados com o formato Obsolete, por exemplo o arquivo
x.eif, o arquivox.eif.jsontambém deve existir no mesmo diretório para poder ser usado
Os dados gravados não podem ser usados com Mega nos seguintes casos:
- Dados gravados com Unity Plugin 4.6 ou inferior
- Dados gravados com EasyAR Sense nativo sem adicionar o mesmo conteúdo do plugin Unity
Além disso, embora o Mega possa funcionar sem rastreamento de movimento, o resultado será diferente. Recomenda-se ativar a função de rastreamento de movimento ao gravar arquivos EIF para garantir que o efeito da reprodução seja adequado à maioria dos cenários de uso.