Unity에서 EIF 파일 녹화하기
이 문서는 시뮬레이션에 사용할 수 있도록 Unity에서 EIF 파일을 녹화하는 방법을 설명합니다.
시작하기 전에
- EIF 파일을 녹화해 시뮬레이션에 사용하는 방법의 기본 개념
- AR Session의 기본 개념, 구성, 워크플로
- session의 AR 기능 컴포넌트에 접근하기를 통해 녹화 컴포넌트에 접근하는 방법
녹화 시작
녹화를 시작하려면 FrameRecorder.enabled = true를 사용합니다. 예:
if (Session.State >= ARSession.SessionState.Ready && Session.Assembly.FrameRecorder.OnSome)
{
var frameRecorder = Session.Assembly.FrameRecorder.Value;
frameRecorder.enabled = true;
}
여기서는 먼저 ARAssembly.FrameRecorder가 존재하는지 확인해야 합니다.
참고
ARAssembly.FrameRecorder는 일부 경우, 예를 들어 FramePlayer를 사용할 때는 사용할 수 없습니다.
FrameRecorder.enabled의 기본값은 false로, 녹화가 꺼져 있다는 뜻입니다. Editor에서 수동으로 설정해도 효과가 없습니다.
녹화는 session 실행 중 FrameRecorder.Status >= FrameRecorder.RecorderStatus.Ready일 때 시작됩니다.
FrameRecorder.Status < FrameRecorder.RecorderStatus.Ready이면 OnReady 이벤트를 사용해 녹화 준비를 기다릴 수 있습니다.
Session.GetComponent<FrameRecorder>().OnReady.AddListener(() => {
// 녹화를 시작할 수 있음
});
녹화 시작 성공 여부는 OnRecording 이벤트로 확인할 수 있습니다.
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
시작에 실패하면 이벤트는 발생하지 않지만, FrameRecorder.Status가 Error인지 확인하면 알 수 있습니다.
중요
장면에서 EIF를 재생할 때의 실행 결과는 녹화에 사용한 장치와 그때 선택한 frame source에 따라 달라집니다. 따라서 EIF를 녹화할 때는 목표 장치와 같거나 비슷한 장치를 사용하는 것이 좋습니다. 그래야 재생 효과가 목표 장치의 효과와 일치하기 쉽습니다. 또한 녹화 시 장면의 모션 추적 기능이 활성화되어 있었는지도 중요합니다. 녹화할 때 활성화되어 있지 않았다면 재생 시에도 활성화할 수 없으며, 모션 추적에 의존하는 AR 기능(예: 밀집 공간 매핑, Mega 등)도 장치에서처럼 동작하지 않습니다.
녹화 중지
FrameRecorder.enabled = false를 사용해 녹화를 중지합니다. 예:
frameRecorder.enabled = false;
이 작업은 녹화를 즉시 중지하고 파일 쓰기가 끝날 때까지 대기합니다.
중요
반드시 녹화를 중지해야 합니다. 그렇지 않으면 녹화 파일이 불완전해져 일부 기능 또는 전체 파일을 사용할 수 없습니다.
파일 저장 및 내보내기
OnRecording 이벤트를 사용해 녹화 파일의 완전한 실제 경로를 얻을 수 있습니다.
frameRecorder.OnRecording.AddListener((file) =>
{
Debug.Log($"Recording started: {file}");
});
기본 설정에서는 녹화 파일이 앱의 persistent data path에 저장되며, Application.persistentDataPath로 접근할 수 있습니다.
FrameRecorder.Configuration.FilePath로 저장 경로를 바꿀 수 있습니다. 이 경로는 녹화 시작 전에 설정해야 하며, AutoFilePath를 끈 뒤에만 적용됩니다. 미리 디렉터리를 만들어 두어야 합니다.
중요
녹화 파일의 저장 디렉터리가 존재하고 앱에서 쓸 수 있어야 합니다. 그렇지 않으면 녹화 시작에 실패합니다.
예를 들어 아래 코드는 녹화 파일을 사용자 지정 디렉터리에 저장하고, session에서 사용하는 FrameSource 타입과 현재 시간에 따라 파일명을 생성합니다.
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;
Editor에서도 AR Session (EasyAR)를 선택한 뒤 Inspector 창에서 Frame Recorder의 Auto File Path를 끄고 설정할 수 있습니다.

팁
FrameRecorder.RecordingConfiguration.FilePath로 저장 디렉터리와 파일명(확장자 제외)을 바꿀 수 있으며, 파일 확장자는 녹화 형식에 따라 자동으로 붙습니다.
파일이 앱의 persistent data path나 다른 private 경로에 저장된 경우, 다음 방법으로 PC로 내보낼 수 있습니다.
- Android에서는 USB로 PC에 연결한 뒤
adb pull또는 다른 방법으로 파일을 내보낼 수 있으며, 보통/sdcarad/Android/data/<app package name>/files아래에 있습니다. - iOS에서는 Xcode의 Devices 창으로 파일을 PC에 내보내거나, iTunes 또는 Finder 파일 공유를 통해 앱의 private 디렉터리에 접근할 수 있습니다.
- 코드로 파일을 공개 디렉터리에 저장할 수 있습니다. 예: Android의 다운로드 폴더, iOS의 사진 등.
참고
iOS 앱에서 iTunes 또는 Finder 파일 공유로 앱의 private 디렉터리에 접근하려면 패키징 전에 Xcode 프로젝트의 Info.plist에 UIFileSharingEnabled 키를 추가하고 YES로 설정해야 합니다.

추가 후 표시되는 텍스트는 입력한 문자열과 다르지만 정상입니다.
녹화 형식 변경
FrameRecorder.Configuration.Format로 녹화 형식을 바꾸며, 녹화 시작 전에 설정해야 합니다.
예를 들어 아래 코드는 녹화 형식을 H264로 강제합니다.
frameRecorder.Configuration.Format = FrameRecorder.InternalFormat.H264;
Editor에서도 AR Session (EasyAR)를 선택한 뒤 Inspector 창에서 Format을 바꿀 수 있습니다.

참고
XREAL에서는 Obsolete 형식으로 녹화한 데이터는 시뮬레이션 실행에 사용할 수 없으며, 문제 보고용으로만 사용해야 합니다.
RecordingFormat으로 현재 녹화 형식을 볼 수 있습니다.
session 시작 시 자동 녹화
session 시작 전에 AutoStart를 true로 설정하면 session 시작 시 녹화가 시작됩니다. 예:
frameRecorder.AutoStart = true;
Editor에서도 AR Session (EasyAR)를 선택한 뒤 Frame Recorder의 Auto Start를 체크할 수 있습니다.

참고
Editor에서 FrameRecorder.enabled를 바꿔도 효과가 없습니다.
Mega에 사용할 수 있는 데이터
Mega를 사용할 때 EIF 및 관련 파일에는 특별한 요구 사항이 있습니다. 오래된 Unity plugin 버전에는 관련 기능이 포함되어 있지 않아, 그 버전으로 녹화한 데이터는 Mega에 사용할 수 없습니다.
다음 경우의 녹화 데이터는 Mega에 사용할 수 있습니다.
- Unity Plugin 버전 4000 이상으로 녹화한 데이터
- Mega Toolbox로 녹화한 데이터
- 데이터가 Obsolete 형식으로 녹화된 경우, 예:
x.eif, 같은 디렉터리에x.eif.json파일이 있어야 사용할 수 있습니다
다음 경우의 녹화 데이터는 Mega에 사용할 수 없습니다.
- Unity Plugin 4.6 이하로 녹화한 데이터
- Unity plugin과 같은 내용을 추가하지 않은 native EasyAR Sense로 녹화한 데이터
또한 Mega는 모션 추적 없이도 동작할 수 있지만, 결과는 다릅니다. EIF 파일을 녹화할 때 모션 추적 기능을 켜는 것이 좋습니다. 그래야 재생 효과가 대부분의 사용 시나리오에 맞습니다.
다음 단계
- EIF 파일로 시뮬레이션 실행하기를 시도하세요
- session 검증 도구 사용하기를 시도하세요