Android XR용 Unity로 개발

적용 가능한 XR 기기
이 가이드에서는 이러한 유형의 XR 기기를 위한 환경을 빌드하는 방법을 설명합니다.
XR 헤드셋
유선 XR 안경

이 가이드에서는 Android XR용 Unity로 개발하는 방법을 개략적으로 설명합니다. Android XR은 Unity에서 기대할 수 있는 익숙한 도구 및 기능과 호환되며 Unity의 Android XR 지원은 OpenXR을 기반으로 빌드되므로 OpenXR 개요에 설명된 많은 기능이 Unity에서도 지원됩니다.

이 가이드에서는 다음을 알아봅니다.

  • Android XR용 Unity 지원
    • Unity XR 기본사항
    • Android XR용 앱 개발 및 게시
    • Android XR용 Unity 패키지
      • Unity OpenXR: Android XR 패키지
      • Unity용 Android XR 확장 프로그램
      • 기능 및 호환성 고려사항
  • 입력 및 상호작용

Android XR용 Unity 지원

Android XR용 Unity 앱을 빌드할 때 최신 버전의 Unity 6에서 혼합 현실 도구 및 기능을 활용할 수 있습니다. 여기에는 XR Interaction Toolkit, AR Foundation, OpenXR Plugin을 사용하는 혼합 현실 템플릿이 포함되어 있어 빠르게 시작할 수 있습니다. Android XR용 Unity로 앱을 빌드할 때는 Universal Render Pipeline (URP)을 렌더링 파이프라인으로, Vulkan을 그래픽 API로 사용하는 것이 좋습니다. 이러한 기능을 사용하면 Vulkan에서만 지원되는 Unity의 일부 그래픽 기능을 활용할 수 있습니다. 이러한 설정을 구성하는 방법에 관한 자세한 내용은 프로젝트 설정 가이드를 검토하세요.

Unity XR 기본사항

Unity 또는 XR 개발을 처음 사용하는 경우 Unity의 XR 매뉴얼을 참고하여 기본적인 XR 개념과 워크플로를 이해할 수 있습니다. XR 매뉴얼에는 다음 정보가 포함되어 있습니다.

Android용 앱 개발 및 게시

Unity는 Unity의 Android 권한, Android 빌드 설정, Android용 앱 빌드, Google Play에 제공 등의 주제를 다루는 Android 개발, 빌드, 게시를 위한 심층 문서를 제공합니다.

Android XR용 Unity 패키지

Android XR용 Unity 앱 빌드를 지원하는 두 가지 패키지가 있습니다. 이러한 두 패키지는 모두 Unity의 XR 플러그인 관리 패키지를 통해 사용 설정할 수 있는 XR 제공업체 플러그인입니다. XR 플러그인 관리자는 XR 플러그인의 로드, 초기화, 설정, 빌드 지원을 관리하고 도움을 제공하기 위한 프로젝트 설정을 추가합니다. 앱이 런타임에 OpenXR 기능을 실행하도록 하려면 프로젝트에서 플러그인 관리자를 통해 이러한 기능을 사용 설정해야 합니다.

이 이미지는 Unity의 편집기를 통해 이러한 기능 그룹을 사용 설정할 수 있는 위치의 예를 보여줍니다.

그림 1. Unity XR 플러그인 관리 화면의 예

Unity OpenXR Android XR

Unity OpenXR Android XR 패키지는 Unity에 Android XR 지원을 추가하는 XR 플러그인입니다. 이 XR 플러그인은 Unity에 대한 대부분의 Android XR 지원을 제공하며 AR Foundation 프로젝트에 Android XR 기기 지원을 사용 설정합니다. AR Foundation은 AR 또는 혼합 현실 환경을 만들려는 개발자를 위해 설계되었습니다. AR 기능의 인터페이스를 제공하지만 자체적으로 기능을 구현하지는 않습니다. Unity OpenXR Android XR 패키지는 구현을 제공합니다. 이 패키지를 시작하려면 시작하기 가이드가 포함된 패키지 매뉴얼을 확인하세요.

Unity용 Android XR 확장 프로그램

Unity용 Android XR 확장 프로그램은 Unity OpenXR Android XR 패키지를 보완하며 몰입형 환경을 빌드하는 데 도움이 되는 추가 기능을 포함합니다. 단독으로 사용하거나 Unity OpenXR Android XR 패키지와 함께 사용할 수 있습니다.

이 패키지를 시작하려면 프로젝트 설정 가이드 또는 Unity용 Android XR 확장 프로그램 가져오기 빠른 시작을 따르세요.

기능 및 호환성 고려사항

다음 표에서는 Unity OpenXR: Android XR 패키지 및 Unity용 Android XR 확장 프로그램 패키지에서 지원되는 기능을 설명하며, 필요한 기능이 포함된 패키지와 호환성 고려사항을 확인하는 데 사용할 수 있습니다.

기능

Unity OpenXR: Android XR 기능 문자열

Unity용 Android XR 확장 프로그램 기능 문자열

사용 사례 및 예상 동작

AR 세션

Android XR: AR 세션

  • 기능 설정에는 버퍼 삭제 최적화 (Vulkan)가 포함됩니다.

Android XR (확장 프로그램): 세션 관리

  • 기능 설정에는 하위 샘플링 (Vulkan) 및 URP SpaceWarp (Vulkan)가 포함됩니다.

두 패키지의 기능을 사용하려면 해당 패키지의 AR 세션 기능을 사용 설정해야 합니다. 두 기능 집합을 동시에 사용 설정할 수 있습니다. 개별 기능은 충돌을 적절하게 처리합니다.

기기 트래킹

해당 사항 없음

해당 사항 없음

기기 트래킹은 실제 공간에서 기기의 위치와 회전을 추적하는 데 사용됩니다. XR Origin GameObject는 해당 XROrigin 구성요소와 카메라 및 TrackedPoseDriver가 있는 GameObject 계층 구조를 사용하여 기기 트래킹을 자동으로 처리하고 트래킹 가능한 항목을 Unity의 좌표계로 변환합니다.

카메라

Android XR: AR 카메라

해당 사항 없음

이 기능은 조명 추정 및 전체 화면 패스스루를 지원합니다.

평면 감지

Android XR: AR 평면

Android XR (확장 프로그램): 평면

이 두 기능은 동일합니다. 둘 중 하나를 사용하세요. Android XR (확장 프로그램): 평면은 개발자가 Unity OpenXR Android XR 패키지에 종속 항목 없이도 Android XR (확장 프로그램): 객체 트래킹 및 영구 앵커 기능을 사용할 수 있도록 포함되어 있습니다. 향후 Android XR (확장 프로그램): 평면은 Android XR: AR 앵커로 대체될 예정입니다.

객체 트래킹

해당 사항 없음

Android XR (확장 프로그램): 객체 트래킹

이 기능은 참조 객체 라이브러리와 함께 사용되는 실제 환경에서 객체를 감지하고 추적하는 기능을 지원합니다.

얼굴 추적

Android XR: AR 얼굴

  • XR_ANDROID_eye_tracking만
  • 얼굴 추적 없음

Android XR: 얼굴 트래킹

  • XR_ANDROID_face_tracking

아바타 눈 지원은 Android XR: AR 얼굴 기능을 통해 제공됩니다. Android XR: 얼굴 트래킹 기능을 통해 사용자의 표정에 액세스합니다. 이 두 기능은 함께 사용할 수 있습니다.

레이 캐스트

Android XR: AR 레이캐스트

  • 평면 앵커
  • 뎁스 앵커

해당 사항 없음

이 기능을 사용하면 광선을 캐스팅하고 실제 환경에서 감지된 광선과 평면 트래킹 가능 항목 또는 뎁스 트래킹 가능 항목 간의 교차점을 계산할 수 있습니다.

앵커

Android XR: AR 앵커

Android XR (확장 프로그램): 앵커

  • 기능 설정에는 지속성이 포함됩니다.

두 기능 모두 공간 앵커 및 평면 앵커를 지원합니다. 둘 중 하나의 기능을 사용하세요. 영구 앵커의 경우 Android XR (확장 프로그램): 앵커를 사용하세요. 향후 Android XR (확장 프로그램): 앵커는 삭제되고 모든 앵커 기능은 Android XR: AR 앵커에 포함될 예정입니다.

오클루전

Android XR: AR 오클루전

  • 환경 뎁스

해당 사항 없음

오클루전을 사용하면 앱의 혼합 현실 콘텐츠가 실제 환경의 객체 뒤에 숨겨지거나 부분적으로 가려진 것처럼 보일 수 있습니다.

실적 측정항목

Android XR 실적 측정항목

해당 사항 없음

이 기능을 사용하여 Android XR 기기의 실적 측정항목에 액세스합니다.

구성 레이어

구성 레이어 지원 (OpenXR 플러그인 및 XR 구성 레이어가 필요함)

Android XR: 패스스루 구성 레이어

  • XR_ANDROID_composition_layer_passthrough_mesh

Unity의 구성 레이어 지원을 사용하여 기본 구성 레이어 (예: 사각형, 원통, 투영)를 만듭니다. Android XR: 패스스루 구성 레이어를 사용하여 Unity의 GameObject에서 읽어오는 맞춤 메시가 있는 패스스루 레이어를 만들 수 있습니다.

시선 추적 렌더링

시선 추적 렌더링 (OpenXR 플러그인이 필요함)

  • 시선 추적 시선 추적 렌더링을 지원합니다. 해상도가 높은 영역은 사용자가 보고 있는 위치에 중앙에 배치되어 사용자에게 덜 눈에 띕니다.

시선 추적 (기존)

시선 추적 렌더링을 사용하면 사용자의 주변 시야에 있는 영역의 해상도를 낮춰 렌더링 속도를 높일 수 있습니다. Unity의 시선 추적 렌더링 기능은 URP 및 Vulkan을 사용하는 앱에서만 지원됩니다. Unity용 Android XR 확장 프로그램의 시선 추적 (기존) 기능은 기본 제공 렌더링 파이프라인 및 OpenGL ES도 지원합니다. 가능하면 Unity의 시선 추적 렌더링 기능을 사용하는 것이 좋습니다. Android XR용으로 빌드할 때는 URP와 Vulkan을 모두 사용하는 것이 좋습니다.

무제한 참조 공간

해당 사항 없음

Android XR: 무제한 참조 공간

이 기능은 XRInputSubsystem 트래킹 원점 모드를 무제한으로 설정합니다. 무제한은 XRInputSubsystem이 변경될 수 있는 세계 앵커와 관련하여 모든 InputDevice를 트래킹함을 나타냅니다.

환경 혼합 모드

해당 사항 없음

환경 혼합 모드

이 기능을 사용하면 패스스루가 사용 설정된 경우 가상 이미지가 실제 환경과 혼합되는 방식을 제어하는 XR 환경 혼합 모드를 설정할 수 있습니다.

입력 및 상호작용

Android XR은 멀티모달 자연 입력을 지원합니다.

손 및 눈 추적 외에도 6DoF 컨트롤러, 마우스, 물리적 키보드와 같은 주변기기도 지원됩니다. 즉, Android XR용 앱은 손 상호작용을 지원해야 하며 모든 기기에 컨트롤러가 제공된다고 가정할 수는 없습니다.

상호작용 프로필

Unity는 상호작용 프로필을 사용하여 XR 애플리케이션이 다양한 XR 기기 및 플랫폼과 통신하는 방식을 관리합니다. 이러한 프로필은 다양한 하드웨어 구성에 예상되는 입력 및 출력을 설정하여 다양한 플랫폼에서 호환성과 일관된 기능을 제공합니다. 상호작용 프로필을 사용 설정하면 XR 애플리케이션이 다양한 기기에서 올바르게 작동하고, 일관된 입력 매핑을 유지하며, 특정 XR 기능에 액세스할 수 있습니다. 상호작용 프로필을 설정하려면 다음 단계를 따르세요.

  1. 프로젝트 설정 창 (수정 > 프로젝트 설정 메뉴)을 엽니다.
  2. 필요한 경우 XR 플러그인 관리 를 클릭하여 플러그인 섹션을 펼칩니다.
  3. XR 플러그인 목록에서 OpenXR 을 선택합니다.
  4. 상호작용 프로필 섹션에서 + 버튼을 선택하여 프로필을 추가합니다.
  5. 목록에서 추가할 프로필을 선택합니다.

손 상호작용

손 상호작용 (XR_EXT_hand_interaction)은 OpenXR 플러그인에서 제공되며 손 상호작가용 프로필을 사용 설정하여 Unity 입력 시스템에서<HandInteraction> 기기 레이아웃을 노출할 수 있습니다. OpenXR에서 정의한 'pinch', 'poke', 'aim', 'grip'의 네 가지 작업 포즈에서 지원하는 손 입력에 이 상호작용 프로필을 사용하세요. 추가 손 상호작용 또는 핸드 트래킹 기능이 필요한 경우 이 페이지의 XR 손을 참고하세요.

시선 상호작용

시선 상호작용 (XR_EXT_eye_gaze_interaction)은 OpenXR 플러그인에서 제공되며 이 레이아웃을 사용하여 확장 프로그램에서 반환하는 시선 포즈 데이터 (위치 및 회전)를 가져올 수 있습니다. 시선 상호작용에 관한 자세한 내용은 OpenXR 입력 가이드 를 참고하세요.

컨트롤러 상호작용

Android XR은 Oculus Touch 컨트롤러 프로필을 6DoF 컨트롤러에 대해 지원합니다. 이러한 두 프로필은 모두 OpenXR 플러그인에서 제공됩니다.

마우스 상호작용

Android XR 마우스 상호작용 프로필 (XR_ANDROID_mouse_interaction) 은 Unity용 Android XR 확장 프로그램에서 제공됩니다. Unity 입력 시스템에서 <AndroidXRMouse> 기기 레이아웃을 노출합니다.

손바닥 포즈 상호작용

OpenXR 플러그인은 Unity 입력 시스템 내에서 <PalmPose> 레이아웃을 노출하는 손바닥 포즈 상호작용 (XR_EXT_palm_pose)을 지원합니다. 손바닥 포즈는 더 복잡한 사용 사례를 위해 손 트래킹을 실행하는 확장 프로그램 또는 패키지를 대체하기 위한 것이 아니라 아바타 시각적 요소와 같은 앱별 시각적 콘텐츠를 배치하는 데 사용할 수 있습니다. 손바닥 포즈는 손바닥 위치와 방향으로 구성됩니다.

XR 손

XR 손 패키지를 사용하면 핸드 트래킹 데이터에 액세스하고 XR_EXT_hand_trackingXR_FB_hand_tracking_aim을 사용하여 핸드 트래킹에서 입력 포즈로 손 관절 데이터를 변환하는 래퍼를 제공할 수 있습니다. XR 손 패키지에서 제공하는 기능을 사용하려면 손 트래킹 하위 시스템Meta 손 트래킹 Aim OpenXR 기능을 사용 설정하세요.

손 추적을 사용 설정하는 방법을 보여주는 예 더 세분화된 손 포즈 또는 손 관절 데이터가 필요하거나 맞춤 동작을 사용해야 하는 경우 XR 손 패키지가 유용할 수 있습니다.

자세한 내용은 프로젝트에서 XR 손을 설정하기 위한 Unity의 문서를 참고하세요

얼굴 트래킹 신뢰도 영역

XR_ANDROID_face_tracking 확장 프로그램은 왼쪽 상단, 오른쪽 상단, 하단 얼굴의 세 가지 얼굴 영역에 대한 신뢰도 값을 제공합니다. 이러한 값은 0 (신뢰도 없음)에서 1 (최고 신뢰도)까지이며 각 영역의 얼굴 추적 정확도를 나타냅니다.

이러한 신뢰값 값을 사용하여 블렌드셰이프를 점진적으로 사용 중지하거나 해당 얼굴 영역에 시각적 필터 (예: 흐리게 처리)를 적용할 수 있습니다. 해당 얼굴 영역에서 기본 블렌드셰이프를 비활성화합니다.

'하단 얼굴' 영역은 입, 턱, 뺨, 코를 비롯한 눈 아래의 모든 것을 나타냅니다. 두 개의 상단 영역에는 얼굴의 왼쪽과 오른쪽에 있는 눈과 눈썹 영역이 포함됩니다.

다음 C# 코드 스니펫은 Unity 스크립트에서 신뢰도 데이터에 액세스하고 사용하는 방법을 보여줍니다.

using UnityEngine;
using Google.XR.Extensions;

public class FaceTrackingConfidence : MonoBehaviour
{
    void Update()
    {
      if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.HasValue)
      {
        DebugTextTopCenter.text = "XrInstance hasn't been initialized.";
        return;
      }
      else if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.Value)
      {
        DebugTextTopCenter.text = "XR_ANDROID_face_tracking is not enabled.";
        return;
      }

      for (int x = 0; x < _faceManager.Face.ConfidenceRegions.Length; x++)
      {
        switch (x)
        {
          case (int)XRFaceConfidenceRegion.Lower:
            regionText = "Bottom";
            break;
          case (int)XRFaceConfidenceRegion.LeftUpper:
            regionText = DebugTextConfidenceLeft;
            break;
          case (int)XRFaceConfidenceRegion.RightUpper:
            regionText = DebugTextConfidenceRight;
            break;
        }
    }
}

자세한 내용은 Unity용 Android XR 확장 프로그램 문서를 참고하세요.

손을 렌더링하는 방법 선택

Android XR은 손을 렌더링하는 두 가지 방법(손 메시 및 프리팹 시각화 도구)을 지원합니다.

손 메시

Android XR Unity 패키지에는 XR_ANDROID_hand_mesh extension에 액세스할 수 있는 손 메시 기능이 포함되어 있습니다. 손 메시 기능은 사용자의 손에 메시를 제공합니다. 손 메시에는 손의 형상을 나타내는 삼각형의 꼭짓점이 포함되어 있습니다. 이 기능은 시각화를 위해 사용자의 손의 실제 형상을 나타내는 맞춤형 메시를 제공하는 데 사용됩니다.

XR 손 프리팹

XR 손 패키지에는 사용자의 손을 렌더링 컨텍스트에 적합하게 표현하기 위해 완전히 리깅된 왼쪽 및 오른쪽 손 이 포함된 손 시각화 도구라는 샘플이 포함되어 있습니다.

시스템 동작

Android XR에는 사용자가 뒤로 이동하거나, 런처를 열거나, 실행 중인 앱의 개요를 볼 수 있는 메뉴를 여는 시스템 동작이 포함되어 있습니다. 사용자는 주 손으로 핀치를 사용하여 이 시스템 메뉴를 활성화할 수 있습니다.

사용자가 시스템 탐색 메뉴와 상호작용할 때는 애플리케이션이 헤드 트래킹 이벤트에만 응답합니다. XR 손 패키지는 사용자가 이 시스템 탐색 메뉴와 상호작용하는 등의 특정 작업을 실행할 때 감지할 수 있습니다. AimFlags, SystemGesture, DominantHand를 확인하면 이 시스템 작업이 실행되는 시점을 알 수 있습니다. AimFlags에 관한 자세한 내용은 Unity의 Enum MetaAimFlags 문서를 참고하세요.

XR Interaction Toolkit

XR Interaction Toolkit 패키지는 VR 및 AR 환경을 만들기 위한 고급 구성요소 기반 상호작용 시스템입니다. Unity 입력 이벤트에서 3D 및 UI 상호작용을 사용할 수 있도록 하는 프레임워크를 제공합니다. 햅틱 반응, 시각적 피드백, 이동을 비롯한 상호작용 작업을 지원합니다.


OpenXR™ 및 OpenXR 로고는 The Khronos Group Inc. 소유의 상표이며 중국, 유럽연합, 일본, 영국에서 상표로 등록되어 있습니다.