VR 템플릿 은 언리얼 엔진 이 사용되는 모든 가상 현실(VR) 프로젝트의 출발점으로 삼을 수 있도록 설계되었습니다. VR 템플릿에는 텔레포트 로코모션의 캡슐화된 로직, VR 관전자 블루프린트 예시, 아이템을 손에 쥐고 어태치하는 것 같은 일반적인 입력 작업이 포함됩니다.

이 페이지에서는 VR 템플릿의 기초를 익히고 VR 템플릿을 사용하여 자신만의 VR 경험을 구현하는 방법을 소개합니다.
지원되는 디바이스
VR 템플릿은 다음 디바이스와 호환됩니다.
-
오큘러스 모바일(Oculus Mobile)
-
오큘러스 퀘스트 1(Oculus Quest 1)
-
오큘러스 퀘스트 2(Oculus Quest 2)
-
-
오큘러스 PC(Oculus PC)
-
오큘러스 리프트 S(Oculus Rift S)
-
오큘러스 링크(Oculus Link) 케이블이 사용된 오큘러스 퀘스트
-
-
스팀 VR(Steam VR)
-
밸브 인덱스(Valve Index)
-
HTC 바이브(HTC Vive)
-
-
Windows 혼합 현실(Windows Mixed Reality)
VR 템플릿을 사용하려면 먼저 언리얼 엔진의 개발 환경에 맞게 디바이스를 설정해야 합니다. 디바이스를 올바르게 설정하는 방법은 XR 개발 아래의 해당 디바이스용 문서를 참조하세요.
OpenXR
VR 템플릿에는 여러 기업이 사용하는 VR 및 AR 개발 표준인 OpenXR 프레임워크가 사용됩니다. 언리얼 엔진으로 OpenXR 플러그인을 사용하면 플랫폼별 확인이나 호출 절차를 거치지 않아도 템플릿의 로직이 여러 플랫폼 및 디바이스와 호환됩니다.
언리얼 엔진의 OpenXR 플러그인은 익스텐션 플러그인을 지원합니다. 엔진에서 디폴트로 제공되지 않는 기능을 OpenXR에 추가하려는 경우 익스텐션 플러그인을 마켓플레이스에서 구하거나 직접 만들 수 있습니다.
폰(Pawn), 게임 모드(Game Mode) 및 플레이어 스타트(Player Start)
다음 오브젝트에 따라 VR 템플릿 경험의 규칙과 설정 방법이 결정됩니다.
UE 오브젝트 | VR 템플릿의 오브젝트 이름 | 위치 | 설명 |
---|---|---|---|
폰(Pawn) | VRPawn | 콘텐츠(Content) > VRTemplate > Blueprints | 언리얼 엔진에서는 사용자의 물리적 표현인 폰으로 사용자가 가상 세계와 상호작용하는 방식이 정의됩니다. VR 템플릿의 폰에는 모션 컨트롤러의 입력 이벤트에 사용되는 로직이 포함됩니다. |
게임 모드(Game Mode) | VRGameMode | 콘텐츠(Content) > VRTemplate > Blueprints | 게임 모드 오브젝트는 VR 경험의 규칙을 정의합니다(예: 사용할 폰 오브젝트 지정). 게임 모드는 맵 및 모드(Maps & Modes) 섹션의 프로젝트 세팅(Project Settings) 에서 설정할 수 있습니다. |
플레이어 스타트(Player Start) | Player Start | 월드 아웃라이너(World Outliner) | 플레이어 스타트 액터는 가상 세계에서 폰이 스폰되는 위치를 정의합니다. VR 경험에서 플레이어 스타트 원점은 가상 세계의 트래킹 원점입니다. VR 템플릿은 VR에서 서 있는 상태를 전제로 설계되었으므로 플레이어 스타트 위치는 바닥을 기준으로 합니다. |
입력
VR 템플릿의 입력은 언리얼 엔진의 입력 액션 및 축 매핑 시스템(Action and Axis Mappings Input System)을 기반으로 합니다. OpenXR로 입력을 설정하는 방법에 대한 자세한 내용은 OpenXR로 입력을 참고하세요.

이동
VR 경험에서 이뤄지는 이동은 로코모션(Locomotion)이라고 합니다. VR 템플릿에서의 이동에는 두 가지 유형이 있습니다. 순간이동(Teleport) 과 스냅 턴(Snap Turn) 입니다. 이 두 가지 이동의 구현 방법을 확인하려면 블루프린트 에디터에서 VRPawn 을 여세요.
텔레포트
레벨에서 다른 위치로 텔레포트하려면 다음 단계에 따릅니다.
-
오른쪽 모션 컨트롤러의 썸스틱이나 트랙패드를 이동하려는 방향으로 움직입니다. 이동할 위치를 알려주는 텔레포트 시각화 툴이 레벨에 나타납니다.
-
썸스틱이나 트랙패드에서 손을 떼면 선택한 위치로 텔레포트합니다.

스냅 턴
머리를 움직이지 않고 가상 캐릭터를 회전하려면 왼쪽 모션 컨트롤러의 썸스틱이나 트랙패드를 회전하려는 방향으로 움직입니다.

이동 허용 영역 설정
레벨은 내비게이션 메시(Navigation Mesh)를 사용하여 사용자가 이동할 수 있는 곳을 표시합니다. 내비 모디파이어 볼륨(NavModifierVolume) 에셋인 NavModifier_NoTeleport 를 구현 방법의 예로 들 수 있습니다. 에셋의 영역 클래스(Area Class) 파라미터가 내비 영역 Null(NavArea_Null) 로 설정되어 있기 때문에 사용자는 해당 볼륨으로 이동할 수 없습니다.

NavModifier_NoTeleport 볼륨에 있을 때는 텔레포트 시각화 툴이 사라집니다.
키보드로 P를 누르면 탐색 가능 영역의 시각화를 토글할 수 있습니다.

잡기
VR 템플릿에는 오브젝트를 집어 손에 어태치하는 몇 가지 방법이 제시되어 있습니다.
레벨에서 오브젝트를 잡는 방법은 다음과 같습니다.
-
잡을 수 있는 오브젝트에 손을 뻗은 채 모션 컨트롤러의 그립(Grip) 버튼을 길게 누릅니다.
-
이렇게 하면 모션 컨트롤러의 GripLocation 위치 주변에 스피어 트레이스(Sphere Trace)가 생깁니다. 이 구체 안에 GrabComponent 를 지닌 액터가 있는 경우 그립 버튼을 누른 손에 어태치됩니다.
-
오브젝트를 손에서 디태치하려면 동일한 모션 컨트롤러의 그립 버튼에서 손을 뗍니다.
액터가 오브젝트를 잡을 수 있게 하려면 GrabComponent 블루프린트를 액터에 추가하고 디테일(Details) 창에서 그랩 타입(Grab Type)을 선택합니다. 플레이 시작(BeginPlay) 시에 컴포넌트 부모의 콜리전 프로파일은 PhysicsActor로 설정되어 있습니다. 이 설정은 VRPawn의 스피어 트레이스에 사용되는 트레이스 채널입니다.
VR 템플릿에 그랩 시스템이 구현된 방식은 GrabComponent 블루프린트 클래스를 열어 확인할 수 있습니다.
그랩 타입
오브젝트의 GrabComponent 에서 그랩 타입을 설정하여 오브젝트가 손에 어태치되는 방식을 정의할 수 있습니다.
GrabType Enum 에셋에는 다음과 같은 그랩 타입이 정의됩니다.
-
자유(Free): 액터의 위치와 방향이 모션 컨트롤러로 오브젝트를 잡은 곳을 기준으로 정해집니다. 작은 정육면체를 예로 들 수 있습니다.
-
스냅(Snap): 액터의 위치와 방향이 모션 컨트롤러를 기준으로 정해집니다. 권총을 예로 들 수 있습니다.
-
커스텀(Custom): 이 옵션을 선택하면 OnGrabbed 및 OnDropped 이벤트를 사용하여 그랩 액션에 대한 커스텀 로직을 생성할 수 있습니다. 또한 현재 사용자가 오브젝트를 쥐고 있는지 알려주는 플래그인 bIsHeld 부울 변수처럼 공개된 다른 변수를 활용할 수도 있습니다. 생성할 수 있는 커스텀 그랩 액션 타입의 예로는 양손 잡기, 다이얼, 레버 및 기타 복잡한 행동(예: 잡고 있으면 지오메트리가 겹치지 않는 액터)이 있습니다.
오브젝트의 GrabComponent에 OnGrabHaptic Effect 변수를 설정하여 오브젝트를 잡을 때 발생하는 햅틱 효과를 정의할 수 있습니다. 햅틱 효과의 예로는 모션 컨트롤러 진동을 들 수 있습니다.
GrabComponent에 사용되는 중요 함수는 블루프린트 인터페이스(Blueprint Interface) 에셋인 VRInteraction BPI를 사용하여 공통 인터페이스로 추상화됩니다. 이 블루프린트 인터페이스 에셋을 사용하면 VRPawn이 로직을 단순화하고 모든 종류의 오브젝트를 여러 번 검사하는 번거로움을 막을 수 있습니다. 블루프린트 인터페이스의 개념과 이점에 대한 추가 정보는 블루프린트 인터페이스를 참조하세요.
메뉴
모션 컨트롤러의 메뉴 버튼을 누르면 VR 템플릿의 메뉴가 열립니다. 이 메뉴는 언리얼 모션 그래픽(UMG)으로 빌드되었습니다. 이 도구의 사용법에 대한 자세한 내용은 UMG UI 디자이너를 참고하세요.

콘텐츠 브라우저(Content Browser) 에서 콘텐츠(Content ) > VRTemplate > Blueprints > WidgetMenu 는 메뉴에 대한 로직을 디자인하고 생성하는 데 사용되는 UMG 에셋이고, Menu 블루프린트는 컨트롤러가 위젯과 상호작용하는 방식을 정의합니다.
VR 스펙테이터
관람자 화면 모드(Spectator Screen Mode)를 사용하면 헤드 마운트 디스플레이(HMD)를 착용한 사용자의 VR 경험을 관람할 수 있습니다. VR 템플릿에는 VR 관람자(VR Spectator) 블루프린트를 사용한 관람자 화면 모드의 예가 구현되어 있습니다.
VR 템플릿에서 관람자 모드를 활성화하는 방법에는 다음 두 가지가 있습니다.
-
세션 중에 Tab 을 눌러 관람자 모드를 토글합니다.
-
VRSpectator bSpectatorEnabled 를 true 로 설정합니다.
VR 관람자는 오큘러스 퀘스트(Oculus Quest) 같은 모바일 VR 디바이스와 호환되지 않습니다.
VR 관람자 모드에서는 다음과 같이 마우스, 키보드, 게임패드를 조작하여 HMD를 착용한 다른 사용자를 가상 세계에서 관찰할 수 있습니다.
액션 | 마우스 및 키보드 조작 | 게임패드 조작 |
---|---|---|
VRSpectator 토글 | 탭 | 전면 아래쪽 버튼 |
앞으로 이동 | W | 왼쪽 썸스틱을 위로 |
뒤로 이동 | S | 왼쪽 썸스틱을 아래로 |
왼쪽으로 이동 | A | 왼쪽 썸스틱을 왼쪽으로 |
오른쪽으로 이동 | D | 왼쪽 썸스틱을 오른쪽으로 |
위로 이동 | E 또는 스페이스 바 | 오른쪽 숄더 버튼 |
아래로 이동 | Q | 왼쪽 숄더 버튼 |
피치 | 마우스를 앞으로 또는 뒤로 이동 | 오른쪽 썸스틱 Y 축 |
요 | 마우스를 왼쪽으로 또는 오른쪽으로 이동 | 오른쪽 썸스틱 X 축 |
시야(FOV) 변경 | 마우스 휠 이동 | 오른쪽 트리거/왼쪽 트리거 |
시야 초기화 | 마우스 가운데 버튼 클릭 | 해당 없음 |
페이드인/페이드아웃 토글 | F | 전면 위쪽 버튼 |
회전 초기화 | R | 해당 없음 |
VR 관람자 모드를 동일한 PC에서 멀티플레이어 경험을 구현하기 위한 출발점으로 삼을 수 있습니다.