VR 템플릿

VR 템플릿을 통해 VR 프로젝트의 기초를 익히고 새로운 프로젝트를 시작하는 방법을 배웁니다.

Choose your operating system:

Windows

macOS

Linux

VR 템플릿언리얼 엔진 이 사용되는 모든 가상 현실(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)](programming-and-scripting/interactive-framework/Pawn/ )

VRPawn

콘텐츠(Content) > VRTemplate > Blueprints

언리얼 엔진에서는 사용자의 물리적 표현인 폰으로 사용자가 가상 세계와 상호작용하는 방식이 정의됩니다. VR 템플릿의 폰에는 모션 컨트롤러의 입력 이벤트에 사용되는 로직이 포함됩니다.

[게임 모드(Game Mode)](programming-and-scripting/interactive-framework/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 을 여세요.

텔레포트

레벨에서 다른 위치로 텔레포트하려면 다음 단계에 따릅니다.

  1. 오른쪽 모션 컨트롤러의 썸스틱이나 트랙패드를 이동하려는 방향으로 움직입니다. 이동할 위치를 알려주는 텔레포트 시각화 툴이 레벨에 나타납니다.

  2. 썸스틱이나 트랙패드에서 손을 떼면 선택한 위치로 텔레포트합니다.

모션 컨트롤러로 텔레포트 시각화 툴을 움직이는 사용자

스냅 턴

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

머리를 움직이지 않은 채 스냅 턴으로 시선을 돌리는 사용자

이동 허용 영역 설정

레벨은 내비게이션 메시(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): 이 옵션을 선택하면 OnGrabbedOnDropped 이벤트를 사용하여 그랩 액션에 대한 커스텀 로직을 생성할 수 있습니다. 또한 현재 사용자가 오브젝트를 쥐고 있는지 알려주는 플래그인 bIsHeld 부울 변수처럼 공개된 다른 변수를 활용할 수도 있습니다. 생성할 수 있는 커스텀 그랩 액션 타입의 예로는 양손 잡기, 다이얼, 레버 및 기타 복잡한 행동(예: 잡고 있으면 지오메트리가 겹치지 않는 액터)이 있습니다.

오브젝트의 GrabComponent에 OnGrabHaptic Effect 변수를 설정하여 오브젝트를 잡을 때 발생하는 햅틱 효과를 정의할 수 있습니다. 햅틱 효과의 예로는 모션 컨트롤러 진동을 들 수 있습니다.

GrabComponent에 사용되는 중요 함수는 블루프린트 인터페이스(Blueprint Interface) 에셋인 VRInteraction BPI를 사용하여 공통 인터페이스로 추상화됩니다. 이 블루프린트 인터페이스 에셋을 사용하면 VRPawn이 로직을 단순화하고 모든 종류의 오브젝트를 여러 번 검사하는 번거로움을 막을 수 있습니다. 블루프린트 인터페이스와 그 이점에 대한 자세한 내용은

[블루프린트 인터페이스](programming-and-scripting/interactive-framework/unreal-engine-actors/actor-communication-in-unreal-engine/interface-quick-start-guide-in-unreal-engine)
를 참고하세요.

메뉴

모션 컨트롤러의 메뉴 버튼을 누르면 VR 템플릿의 메뉴가 열립니다. 이 메뉴는 언리얼 모션 그래픽(UMG)으로 빌드되었습니다. 이 도구의 사용법에 대한 자세한 내용은 UMG UI 디자이너를 참고하세요.

두 가지 옵션(재시작 및 현실)이 있는 VR 메뉴와 상호작용하는 사용자

콘텐츠 브라우저(Content Browser) 에서 콘텐츠(Content ) > VRTemplate > Blueprints > WidgetMenu 는 메뉴에 대한 로직을 디자인하고 생성하는 데 사용되는 UMG 에셋이고, Menu 블루프린트는 컨트롤러가 위젯과 상호작용하는 방식을 정의합니다.

VR 스펙테이터

관람자 화면 모드(Spectator Screen Mode)를 사용하면 헤드 마운트 디스플레이(HMD)를 착용한 사용자의 VR 경험을 관람할 수 있습니다. VR 템플릿에는 VR 관람자(VR Spectator) 블루프린트를 사용한 관람자 화면 모드의 예가 구현되어 있습니다.

VR 템플릿에서 관람자 모드를 활성화하는 방법에는 다음 두 가지가 있습니다.

  • 세션 중에 Tab 을 눌러 관람자 모드를 토글합니다.

  • VRSpectator bSpectatorEnabledtrue 로 설정합니다.

VR 관람자는 오큘러스 퀘스트(Oculus Quest) 같은 모바일 VR 디바이스와 호환되지 않습니다.

VR 관람자 모드에서는 다음과 같이 마우스, 키보드, 게임패드를 조작하여 HMD를 착용한 다른 사용자를 가상 세계에서 관찰할 수 있습니다.

액션

마우스 및 키보드 조작

게임패드 조작

VRSpectator 토글

전면 아래쪽 버튼

앞으로 이동

W

왼쪽 썸스틱을 위로

뒤로 이동

S

왼쪽 썸스틱을 아래로

왼쪽으로 이동

A

왼쪽 썸스틱을 왼쪽으로

오른쪽으로 이동

D

왼쪽 썸스틱을 오른쪽으로

위로 이동

E 또는 스페이스 바

오른쪽 숄더 버튼

아래로 이동

Q

왼쪽 숄더 버튼

피치

마우스를 앞으로 또는 뒤로 이동

오른쪽 썸스틱 Y 축

마우스를 왼쪽으로 또는 오른쪽으로 이동

오른쪽 썸스틱 X 축

시야(FOV) 변경

마우스 휠 이동

오른쪽 트리거/왼쪽 트리거

시야 초기화

마우스 가운데 버튼 클릭

해당 없음

페이드인/페이드아웃 토글

F

전면 위쪽 버튼

회전 초기화

R

해당 없음

VR 관람자 모드를 활용해 동일한 PC에서 멀티플레이어 경험을 구현할 수도 있습니다.

태그