Table of Contents

Unity에서 EIF 파일로 시뮬레이션 실행하기

이 문서는 Unity에서 EIF 파일을 사용해 시뮬레이션 실행하는 방법을 설명합니다. 이를 통해 대부분의 개발 작업을 컴퓨터에서 수행하고 결과를 직관적으로 볼 수 있습니다.

시작하기 전에

시뮬레이션은 EIF 파일을 입력으로 사용하므로, 시작하기 전에 먼저 EIF 파일을 녹화해야 합니다.

또한 다음 내용을 이해해야 합니다.

session의 frame player 활성화

ARSession.AssembleOptions는 session 컴포넌트 조합을 설정하는 여러 방법을 제공합니다. 그중 하나는 AssembleOptions.FrameSourceFramePlayer로 설정해 frame player 컴포넌트를 활성화하고, EIF 파일로 시뮬레이션 실행을 할 수 있게 하는 것입니다.

예를 들면 다음과 같습니다.

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

Editor에서도 AR Session (EasyAR)를 선택한 뒤 Inspector 창의 Assemble Options에서 해당 옵션을 수정할 수 있습니다.

alt text

이렇게 하면 session이 시작될 때 frame player 컴포넌트가 활성화되고 다른 frame source 컴포넌트는 선택되지 않습니다.

frame player로 EIF 파일을 재생할 때의 효과는 아래 영상과 같습니다.

이 영상은 frame player를 사용해 컴퓨터에서 밀집 공간 매핑을 실행하는 효과를 보여줍니다. 왼쪽은 Hierarchy 뷰, 가운데는 Scene 뷰, 오른쪽은 Game 뷰입니다. Game 뷰의 내용은 실제 세계에서 사용자가 휴대폰으로 보는 내용과 같습니다.

EIF 파일을 재생하는 동안 session의 각 AR 기능 컴포넌트는 정상적으로 동작하며, 장면의 내용과 상호작용 로직도 정상적으로 동작하므로, 대부분의 개발 작업을 컴퓨터에서 수행하면서 결과를 직관적으로 볼 수 있습니다.

컴퓨터에서 frame player로 EIF를 재생할 때 보이는 효과는 EIF 파일을 녹화할 때 휴대폰에서 본 효과와 기본적으로 같습니다.

중요

장면에서 EIF를 재생할 때의 실행 결과는 녹화에 사용한 장치와 그때 선택한 frame source에 따라 달라집니다. 따라서 EIF를 녹화할 때는 목표 장치와 같거나 비슷한 장치를 사용하는 것이 좋습니다. 그래야 재생 효과가 목표 장치의 효과와 일치하기 쉽습니다. 또한 녹화 시 장면의 모션 추적 기능이 활성화되어 있었는지도 중요합니다. 녹화할 때 활성화되어 있지 않았다면 재생 시에도 활성화할 수 없으며, 모션 추적에 의존하는 AR 기능(예: 밀집 공간 매핑, Mega 등)도 장치에서처럼 동작하지 않습니다.

session 시작 시 재생

기본적으로 session이 시작되면 frame player가 자동으로 EIF 파일 재생을 시작합니다. 하지만 재생 전에 EIF 파일 경로를 지정해야 하며, FramePlayer.FilePathTypeFramePlayer.FilePath 속성으로 설정할 수 있습니다.

예를 들면 다음과 같습니다.

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

Editor에서도 AR Session (EasyAR)를 선택한 뒤 Inspector 창의 Frame Player 컴포넌트에서 해당 옵션을 수정할 수 있습니다.

alt text

파일이 지정되지 않았거나 파일 경로가 유효하지 않으면 session이 시작될 때 frame player가 실행에 실패하고 오류 로그를 출력합니다.

File not found:

수동 재생

재생 시점을 직접 제어하려면 session 시작 전에 FramePlayer.enabledfalse로 설정할 수 있습니다.

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

Editor에서도 AR Session (EasyAR)를 선택한 뒤 Inspector 창의 Frame Player 컴포넌트에서 Enabled 체크를 해제할 수 있습니다.

alt text

재생이 필요할 때는 Play()를 사용해 재생을 시작합니다.

예를 들면 다음과 같습니다.

if (Session.Assembly.FrameSource is FramePlayer player)
{
    player.Play();
}

Play()를 호출할 때마다 이전 재생이 멈춘 뒤(이미 재생한 적이 있다면) 처음부터 다시 재생됩니다.

주의

새 데이터를 재생해도 장면에 있던 기존 데이터는 지워지지 않습니다. AR 컴포넌트의 상태도 초기화되지 않으며, 카메라 데이터가 이전 데이터가 멈춘 지점에서 새 데이터 시작 지점으로 갑자기 이동한 것처럼 동작합니다.

일부 기능에는 큰 영향이 없지만, 모션 추적에 의존하는 기능(예: 밀집 공간 매핑, Mega 등)에서는 기능 상태가 비정상적으로 변해 실행 결과에 영향을 줄 수 있습니다. 따라서 새 데이터를 재생하기 전에 session을 다시 시작해 모든 AR 컴포넌트 상태를 초기화하는 것이 좋습니다.

일시 중지 및 계속

FramePlayer.enabled를 사용해 재생의 일시 중지와 계속을 제어합니다.

예를 들어 FramePlayer.enabled = false로 설정하면 재생을 일시 중지할 수 있습니다.

player.enabled = false;

재생이 일시 중지되면 모든 AR 기능 컴포넌트가 동작을 멈춥니다. 장면의 내용과 상호작용 로직은 내용에 따라 멈추지 않을 수도 있습니다. 재생을 계속하면 AR 기능 컴포넌트는 일시 중지한 지점부터 다시 동작합니다.

재생 중지

Stop()를 사용해 재생을 중지합니다.

player.Stop();

재생이 중지되면 모든 AR 기능 컴포넌트가 동작을 멈춥니다. 장면의 내용과 상호작용 로직은 내용에 따라 멈추지 않을 수도 있습니다.

지정된 시점으로 이동해 재생하기(seek)

Seek(double)를 사용해 지정된 시점으로 이동합니다.

예를 들어 5초 뒤로 이동하려면 다음과 같이 합니다.

player.Seek(player.Time + 5);
참고

이동 후 재생은 정확히 지정한 시점에서 시작되지 않을 수 있으며, 이는 EIF 파일의 인코딩 방식과 키 프레임 간격에 따라 달라집니다.

모든 EIF 파일이 seek를 지원하는 것은 아닙니다. IsSeekable 속성을 사용해 현재 재생 중인 EIF 파일이 seek를 지원하는지 확인할 수 있습니다.

참고

H264 형식으로 녹화되고 녹화를 정상적으로 중지한 EIF 파일만 seek를 지원합니다. EIF 파일이 seek를 지원하지 않으면 Seek(double)를 호출해도 아무 효과가 없습니다.

재생 속도 제어

Speed 속성을 사용해 재생 속도를 제어합니다.

예를 들어 원래 속도보다 0.1배 높이려면 다음과 같이 합니다.

player.Speed += 0.1;

모든 EIF 파일이 재생 속도 제어를 지원하는 것은 아닙니다. IsSpeedChangeable 속성을 사용해 현재 재생 중인 EIF 파일이 재생 속도 제어를 지원하는지 확인할 수 있습니다.

참고

H264 형식으로 녹화되고 녹화를 정상적으로 중지한 EIF 파일만 재생 속도 제어를 지원합니다. EIF 파일이 이를 지원하지 않으면 Speed를 설정해도 아무 효과가 없습니다.

관련 항목

  • session 검증 도구 사용하기를 시도해 보세요. 이 도구에는 간단한 EIF 플레이어가 포함되어 있어 EIF 파일로 시뮬레이션 실행을 더 빠르게 할 수 있습니다