모션 컨트롤러 사용

모션 컨트롤러를 사용하여 오브젝트를 집어들고 버리는 방법입니다.

Windows
MacOS
Linux
필요한 사전지식

이 글은 다음 주제에 대한 지식이 있는 분들을 대상으로 합니다. 계속하기 전 확인해 주세요.

UE4 프로젝트에 모션 컨트롤러 지원을 추가하면 한 단계 높은 수준의 몰입감과 현실감을 더할 수 있습니다. 그 방법 중 하나는 모션 컨트롤러로 월드에 배치된 오브젝트를 집어들 수 있도록 하는 것입니다. 여기서는 UE4 VR 프로젝트에 모션 컨트롤러 지원을 추가하는 방법을 살펴보겠습니다.

모션 컨트롤러 구성

여기서는 모션 컨트롤러로 레벨에 배치된 아이템을 집어들고 버릴 수 있도록 구성하는 방법을 살펴보겠습니다.

컴포넌트, 변수, 이벤트 구성

이벤트 그래프에 노드를 시작하기에 앞서, 먼저 몇 가지 컴포넌트와 변수를 만들어 구성해 줘야 합니다. 여기서는 어떤 컴포넌트와 변수가 필요한지, 그 세팅은 어떻게 해야 하는지 다뤄보겠습니다.

컴포넌트 / 변수 유형

이름

Scene

HeldObjectLocation

X: 38, Y: 0, Z: 0

Boolean

IsHoldingObject

false

클릭하면 이미지 원본을 확인합니다.

Held Object Location 의 부모가 MC_Left 로 되어있는지 확인합니다. 오브젝트를 집어들면 여기에 배치를 하게 됩니다.

Custom Event 도 둘 만들고 이름을 다음과 같이 짓습니다:

노드 이름

PickUpObject

N/A

DropObject

N/A

HT_Using_Touch_06.png

아이템 잡기와 버리기

Holding and Dropping of Items (아이템 잡기와 버리기) 섹션은 오브젝트를 집어들고 잡거나 버리는 것까지 처리하는 다양한 커스텀 이벤트를 호출합니다. 사용자는 왼쪽 모션 컨트롤러 트리거를 누르거나 떼는 것으로 이 명령을 내립니다. 여기서 한 가지 참고할 점은, Branch (분기)문을 사용하여 오브젝트를 한 번에 하나만 집도록 하고 있습니다. 사용자가 오브젝트를 한 번에 하나만 집을 수 있도록 하기 위해서는 중요한 부분입니다.

Copy Example

HT_Using_Touch_00.png

좌상단 구석의 Copy Node Graph 를 클릭하면 이 섹션의 블루프린트 코드를 복사합니다.

오브젝트 집어들기 이벤트

Pick-Up Object Event 섹션에서는 집어들 수 있는 오브젝트를 찾아내고 그것을 집어드는 로직 전부를 처리합니다. 하나의 함수이지만, 두 부분으로 나눌 수 있습니다. 여기서는 그 두 부분이 무엇이고 어떤 작업을 하는지 살펴보겠습니다.

  1. Pick-Up Object Event 첫 번째 부분은 집어들기위한 조건을 만족하는 월드 내 오브젝트 찾기를 처리합니다. 그렇게 하기 위해 사용자의 왼손 모션 컨트롤러가 가리키는 앞 방향으로 월드에 1,000 CM 광선을 쏩니다. 이 광선은 Physics Body(피직스 바디) Object Type(오브젝트 유형)을 갖지 않은 오브젝트를 무시하게 되어있기도 합니다.

    Copy Node Graph

    좌상단 구석의 Copy Node Graph 를 클릭하면 이 섹션의 블루프린트 코드를 복사합니다.

    테스팅 목적으로, 월드에 쏜 광선을 확인할 수 있도록 Draw Debug TypeDuration 으로 설정합니다. 제작 단계에 투입할 준비가 되면, Draw Debug Type 을 None 으로 설정해야 합니다.

  2. Pick-Up Object Event 의 두 번째 부분은 집어들 수 있는 오브젝트를 찾았을 때 벌어지는 일을 처리합니다. 오브젝트를 찾으면 Break Hit Result 노드를 사용하여 걸린 오브젝트 관련 추가 정보를 구합니다. 이 경우 걸린 액터와 컴포넌트를 찾고 있습니다. 그런 다음 그 오브젝트의 피직스를 끄고, 왼손 모션 컨트롤러에 붙인 Held Object Location (잡은 오브젝트 위치)에 붙입니다. 마지막으로, IsHoldingObject 변수를 true 로 설정하여 다른 것을 집어들지 못하도록 합니다.

    Copy Node Graph

오브젝트 버리기 이벤트

Drop Object Event 섹션에서는 집어든 오브젝트를 버린 뒤 모든 것을 리셋시켜 다른 것을 집어들 수 있도록 하는 로직을 전부 처리합니다. 이 이벤트의 첫 번째 작업은, 사용자가 버릴 수 있는 무언가를 잡고 있는지 확인하는 것입니다. 무언가를 잡고 있다면, 그 오브젝트를 모션 컨트롤러에서 떼고 피직스를 다시 켜서 땅으로 낙하할 수 있도록 합니다. 마지막으로 Hit Component 와 Picked Up Actors 변수의 이전 데이터를 비워 새로 집어든 오브젝트를 저장할 수 있도록 합니다.

Copy Node Graph

완성 블루프린트

이제 블루프린트가 완성되었으니, 월드에 집어들 수 있는 오브젝트를 조금 추가해 주기만 하면 됩니다. 집어들고자 하는 오브젝트는 피직스 바디가 있어야 하므로, 스태틱 메시를 몇 개 추가해 주고 모빌리티무버블 로 설정하고 Simulate Physics (피직스 시뮬레이션) 옵션도 켜주면 됩니다.

클릭하면 이미지 원본을 확인합니다.

그리고 월드에 VRPawn 을 배치하고 Auto Possess Player (플레이어 자동 빙의)를 Player 1 로 설정한 뒤 VR 프리뷰로 프로젝트를 실행합니다. 다음, Rift HMD 를 쓰고 Touch 컨트롤러를 쥔 채 집어들고자 하는 오브젝트 앞으로 왼쪽 터치 컨트롤러를 조준하고 트리거를 쥐면 집어듭니다. 트리거를 놓으면 오브젝트를 버리고 다음 비디오처럼 다른 것을 집어들 수 있습니다.

아래는 완성된 블루프린트로, VRPawn 블루프린트에 바로 복사해 붙여넣거나, 다른 프로젝트에서 사용할 수도 있습니다. 새 블루프린트로 복사할 때는, 필수 변수와 컴포넌트 전부 만들어 줘야 한다는 점 기억해 주시기 바랍니다.

Copy Node Graph

좌상단 구석의 Copy Node Graph 를 클릭하면 이 섹션의 블루프린트 코드를 복사합니다.

UE4 프로젝트 다운로드

아래는 이 예제를 만드는 데 사용된 UE4 프로젝트 다운로드 링크입니다.

태그
Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼