Unity scene에서 Unity XR object 자동 전환
Unity의 XR 컴포넌트(AR Foundation 포함)가 지원할 수 있는 디바이스는 제한적입니다. 지원되는 디바이스에서는 AR Foundation을 사용하면서, 다른 많은 디바이스에서도 AR 기능을 사용할 수 있도록 EasyAR는 Unity XR object 자동 전환 기능을 제공합니다. 다음 내용은 이 기능이 scene object에 적용하는 변경 사항과 사용 방법을 설명합니다.
시작하기 전에
- Unity XR framework에 대한 EasyAR 지원을 읽고 EasyAR의 Unity XR framework 지원 상황과 어떤 경우에 AR Foundation 사용을 고려할 수 있는지 이해합니다.
- EasyAR 프로젝트의 AR Foundation scene 구성과 사용법에 설명된 대로 scene에 AR Foundation의 ARSession 및 XROrigin을 추가했는지 확인합니다.
기능 소개
Unity의 AR Foundation은 휴대폰에서 하위 구현이 ARCore와 ARKit이므로 제한된 디바이스에서만 사용할 수 있으며, 특히 많은 중국 내수 Android 휴대폰에서는 사용할 수 없습니다. 따라서 일반적으로 지원되는 디바이스에서만 AR Foundation 및 관련 기능 script를 활성화하는 것이 권장됩니다. Unity XR object 자동 전환 기능은 위 작업을 구현하며, 주로 mobile AR용으로 설계되어 있고 헤드셋에서는 기본 구성에서 비활성화됩니다.
전체 기능이 활성화되면,
- editor에서 easyar.ARSession은 UnityEngine.XR.ARFoundation.ARSession을 비활성화합니다
- runtime에서 easyar.ARSession은 Awake() 시 모든 Unity XR Core 컴포넌트와 AR Foundation 컴포넌트를 비활성화합니다.
- runtime에서 선택된 FrameSource가 ARFoundationFrameSource를 상속하거나 XROrigin origin을 구현한 ExternalDeviceFrameSource인 경우, 비활성화된 Unity XR Core 및 AR Foundation 컴포넌트는 easyar.ARSession.StartSession() 시 활성화됩니다(EasyAR가 비활성화하지 않은 컴포넌트는 활성화되지 않음). 다른 FrameSource가 선택되면 easyar.ARSession.StartSession() 시 모든 Unity XR Core 및 AR Foundation 컴포넌트가 비활성화됩니다.
- runtime에서 모든 Unity XR Core 및 AR Foundation 컴포넌트는 easyar.ARSession.StopSession(bool) 시 비활성화됩니다.
기본 구성에서 기능 활성화 조건은 다음과 같습니다.
- Windows/Mac에서 활성화.
- switcher 시작 시 mobile AR(ARKit/ARCore)의 loader가 active이면 활성화.
- switcher 시작 시 mobile AR(ARKit/ARCore) 이외의 다른 loader가 존재하지만 어떤 loader도 active가 아니면 비활성화.
참고
XR Interaction Toolkit의 컴포넌트는 이 기능의 제어를 받지 않으며, EasyAR에서 사용 가능한지는 검증되지 않았습니다. 이론적으로 Unity.XR.CoreUtils.XROrigin GameObject 및 그 Camera만 사용하는 기능은 정상적으로 사용할 수 있어야 합니다. 동작이 비정상적이면 ARSession.ARCenterMode를 ARSession.ARCenterMode.SessionOrigin으로 설정해 볼 수 있습니다. 그래도 기능이 정상적이지 않으면 사용자 정의 XR Interaction Toolkit 컴포넌트 제어를 구현하고, FrameSource가 ARFoundationFrameSource를 상속하지 않을 때 관련 컴포넌트를 비활성화해야 합니다.
구성 방법
이 기능은 Project Settings > EasyAR > Sense의 Unity XR > Unity XR Auto Switch 옵션에서 활성화하거나 끌 수 있습니다.

그림의 옵션 구성 동작은 다음과 같습니다:
- Editor: 편집 모드 옵션
- Disable AR Session: easyar.ARSession이 존재할 때, 편집 중 UnityEngine.XR.ARFoundation.ARSession을 비활성화합니다.
- Player: runtime 모드 옵션
- Enable: runtime 제어를 활성화합니다. 주의: 이 옵션을 끄면 편집 모드에서 비활성화된 컴포넌트는 runtime에 복원되지 않습니다.
- Enable If Desktop: Windows/Mac에서 활성화합니다.
- Enable If Mobile AR On Startup: switcher 시작 시 mobile AR(ARKit/ARCore)의 loader가 active이면 활성화합니다. 일반적으로 이 옵션은
Project Settings>XR Plug-in Management의Initialize XR on Startup이 선택되어 있어야 합니다. - Disable If Non Mobile AR Post Startup: switcher 시작 시 mobile AR(ARKit/ARCore) 이외의 다른 loader가 존재하지만 어떤 loader도 active가 아니면 비활성화합니다. 일반적으로 이 옵션은
Project Settings>XR Plug-in Management의Initialize XR on Startup이 선택되지 않았을 때 사용됩니다. - Restore AR Session When Disabled: 기능이 비활성화되면 비활성화된 모든 UnityEngine.XR.ARFoundation.ARSession을 복원(활성화)합니다(EasyAR에 의해 비활성화되었는지 여부와 무관). 이 옵션은 일반적으로 편집 시 비활성화된 컴포넌트를 복원하는 데 사용됩니다.
사용자 정의 제어 방법 사용
이러한 컴포넌트의 전환을 사용자 정의해야 하거나 EasyAR의 동작이 특정 컴포넌트의 정상 동작을 방해하는 경우, 이 옵션들을 꺼두고 다음 기본 규칙에 따라 컴포넌트 전환을 사용자 정의해야 합니다:
- editor에서 UnityEngine.XR.ARFoundation.ARSession을 비활성화합니다(실행 순서에서 다른 모든 script보다 빠름)
- AR Foundation이 작동을 시작하기 전에 모든 Unity XR Core 컴포넌트와 AR Foundation 컴포넌트, 그리고 제어해야 하는 관련 컴포넌트 또는 기능을 비활성화합니다
- easyar.ARSession.Assemble() 과정에서 ARCoreARFoundationFrameSource 또는 ARKitARFoundationFrameSource가 선택된 경우, 이전에 비활성화한 모든 컴포넌트 또는 기능을 StartSession() 완료 전에 활성화해야 하며, 일반적으로 easyar.ARSession.AssembleUpdate 이벤트 응답에서 완료하는 것이 권장됩니다
- easyar.ARSession.Assemble() 과정에서 다른 FrameSource를 선택해 사용한 경우에는 그대로 유지합니다