헤드셋에서 EasyAR 지원하기
이 문서는 EasyAR Sense Unity Plugin의 헤드셋 확장 패키지 템플릿을 사용해 헤드셋 장치를 지원하는 EasyAR 확장 패키지를 개발하는 방법을 설명합니다.
시작하기 전에
개발에 들어가기 전에 먼저 EasyAR Sense Unity Plugin 사용 방법을 이해해야 합니다.
- 빠른 시작
- AR Session 예제, 이미지 추적 예제 ImageTracking_Targets, 밀집 공간 지도 예제 SpatialMap_Dense_BallGame를 실행해 보세요. 휴대폰과 헤드셋에서의 동작은 비슷합니다.
헤드셋 플러그인 개발에는 기본 기능이 포함되므로, 먼저 다음 내용을 이해해야 합니다.
- AR Session 이해하기
- 프레임 소스와 외부 프레임 소스 이해하기
또한 Unity 패키지를 개발하는 방법도 익혀 두어야 합니다.
AR/MR용 장치 준비
모션 추적/VIO 시스템 준비
장치의 추적 오차가 제어되고 있는지 확인하세요. Mega 같은 EasyAR 기능은 어느 정도 장치의 누적 오차를 줄일 수 있지만, 큰 국소 오차는 EasyAR 알고리즘을 불안정하게 만들 수 있습니다. 일반적으로 VIO 드리프트가 1‰ 이내이기를 기대합니다.
디스플레이 시스템 준비
실제 물체와 같은 크기와 윤곽을 가진 가상 물체를 가상 세계에 배치하고, 가상 카메라와의 상대 변환 관계가 현실 세계에서 대응되는 실제 물체와 장치의 변환 관계와 같을 때, 가상 물체가 실제 물체 위에 정확히 겹쳐 표시되고 장치를 움직이거나 고개를 돌려도 표시 효과가 깨지지 않아야 합니다. Vision Pro의 효과를 참고할 수 있습니다.
장치 SDK 준비
외부 입력 프레임 데이터를 제공할 수 있는 API가 이미 있어야 합니다. 이 데이터는 시스템 내에서 정확히 두 시점에 의해 생성되어야 하며, 데이터가 정렬되지 않는 상황이 발생하지 않도록 해야 합니다.
헤드셋 확장 패키지 템플릿 사용
Unity의 Package Manager window에서 로컬 tarball 파일로 설치를 사용해 EasyAR Sense Unity Plugin(package com.easyar.sense)을 가져옵니다. 헤드셋 확장 템플릿(package com.easyar.sense.ext.hmdtemplate)을 Unity 프로젝트의 Packages 디렉터리에 압축 해제한 뒤 Samples~ 폴더 이름을 Samples로 변경합니다.
이때 다음과 같은 디렉터리 구조가 보여야 합니다.
.
├── Assets
└── Packages
└── com.easyar.sense.ext.hmdtemplate
├── CHANGELOG.md
├── Documentation~
├── Editor
├── LICENSE.md
├── package.json
├── Runtime
└── Samples
└── Combination_BasedOn_HMD
팁
필요하면 Unity에서 허용하는 어떤 방법이든 사용해 EasyAR Sense Unity Plugin을 가져오고 헤드셋 확장 템플릿을 배치할 수 있습니다.
템플릿을 사용하지 않는 경우에도 Unity의 사용자 지정 패키지 생성 가이드를 참고해 새 package를 만들 수 있습니다.
장치 SDK가 Unity package로 구성되어 있지 않다면, 헤드셋 확장 템플릿을 Unity 프로젝트의 Assets 폴더에 압축 해제한 뒤 압축 해제된 파일에서 package.json과 .asmdef 확장자의 파일을 모두 삭제해야 합니다. 이 사용 방식에서는 장치 SDK와 EasyAR를 함께 사용하는 사용자가 합리적인 버전 의존성을 얻을 수 없습니다.
런타임 입력 확장 완성
장치 움직임과 이미지 데이터 입력 확장 만들기 방법을 따라 Runtime/HMDTemplateFrameSource.cs를 수정하고 헤드셋에 맞는 입력 확장을 완성하세요. 이것이 확장 패키지의 핵심 개발 작업입니다.
에디터 메뉴 완성
MenuItems 클래스의 "HMD Template" 문자열을 장치 이름으로 바꾸세요. 다른 사용자 정의 에디터 기능이 필요하다면 추가 스크립트를 넣어도 됩니다.
개발자가 Hierarchy 뷰에서 AR Session (EasyAR) 를 선택하고 마우스 오른쪽 버튼을 클릭하면 다음 메뉴가 나타납니다.
EasyAR Sense>Extensions>Frame Source : [Device Name]: 현재 session에 해당 장치의 frame source를 추가합니다.EasyAR Sense>Extensions>Frame Source : [Device Name (keep it only)]: 현재 session에 해당 장치의 frame source를 추가하고 하나만 유지합니다.

앱 예제 완성
예제는 Samples/Combination_BasedOn_HMD에 있습니다. 단순화를 위해 예제 템플릿에는 코드가 없으며, 모든 AR 기능은 scene 내용과 설정만으로 완성할 수 있습니다.
장치에서 실행 가능한 콘텐츠를 scene에 추가하세요.
팁
필요하다면 반대로 진행해도 됩니다. 즉, 장치에서 실행 가능한 scene을 먼저 사용하고, 그 scene에 EasyAR 구성 요소와 예제 scene의 다른 오브젝트를 추가할 수도 있습니다.
session 원점 아래에 배치하도록 설계된 오브젝트를 수정하세요.
scene에 session 원점이 정의되어 있다면
EasyARPanda와UI를 원점 노드 아래로 옮기세요.
EasyARPanda는 장치 모션 추적 동작의 기준이 되어, 추적이 불안정할 때 원인을 파악하는 데 도움이 됩니다.이 오브젝트 이름의 괄호 안 텍스트는 확장 개발자를 위한 힌트이므로 삭제할 수 있습니다.
(Move into Origin if there is any)(Move into Origin if there is any, set constraint source to your rendering camera)
HUD버튼 동작을 설정하세요.UI의 constraint source를 가상 카메라로 설정해HUD버튼이 예상대로 동작하도록 합니다.
Canvas의 raycast 기능을 설정하세요.UI노드 아래의Canvas를 수정해 raycast가 동작하고 모든 UI 버튼과 스위치가 예상대로 동작하도록 합니다.템플릿에는 이미
Canvas노드 아래에 XR Interaction Toolkit의 Tracked Device Graphic Raycaster가 추가되어 있습니다. 해당 package를 가져오면 확인할 수 있습니다.
장치에서 실행할 때 XR Interaction Toolkit을 사용하지 않으면 아래와 같은 누락 스크립트 경고가 표시됩니다. 이를 삭제하고 장치에 필요한 raycaster 구성 요소를 추가할 수 있습니다.

다음 단계
- 확장 패키지를 더 완성하기 전에 먼저 입력 확장의 bring-up 검증을 실행해야 합니다
- 모두 완료한 뒤에는 확장 패키지 배포를 준비할 수 있습니다