EasyCastleUNITY

OVR 유니티 Grab Interaction (물체 잡기) 본문

Oculus VR 탐구

OVR 유니티 Grab Interaction (물체 잡기)

EasyCastleT 2023. 10. 23. 17:17

https://easycastleunity.tistory.com/185

 

OVR 유니티 기본 세팅 및, 손동작 테스트

https://developer.oculus.com/documentation/unity/unity-isdk-getting-started/ Getting Started with Interaction SDK | Oculus Developers developer.oculus.com 기본세팅: 위 문서를 기준으로 만들었습니다. 이 글은 Oculus Integration SDK 57.0

easycastleunity.tistory.com

지난 번 포스트에서 기본적인 세팅과, 손동작을 테스트 해보았습니다. 

이번에는 거기서 조금 더 나아가 물체를 집는 기능을 탐구해보겠습니다. 

https://developer.oculus.com/documentation/unity/unity-isdk-create-hand-grab-interactions/

 

Create Grab Interactions | Oculus Developers

 

developer.oculus.com

이 글은 위 링크의 문서를 바탕으로 만들고 작성했으며, Oculus Integration SDK 57.0버전을 기준으로 작성되었습니다. 참고하여 주시기 바랍니다.


Hands에 Hand Grab Interactor를 추가하는 방법

1.먼저 저번 포스트에서 만들어둔 프로젝트를 열어주십시오. 

2.그 다음 프로젝트 창에서 HandGrabInteractor를 검색하여 찾아주십시오. 

3. OVRInteraction > Hands > LeftHand > HandInteractorsLeft 에 자식으로 위에서 찾은 HandGrabInteractor prefab 을 부착합니다. 

4. Hierarchy 에서, HandInteractorsLeft

를 선택하세요5. 인스펙터에서, Best Hover Interactor Group 컴포넌트를 찾고, Interactors 리스트에 새로운 요소를 + 버튼을 눌러 만드세요6. HandGrabInteractor 를 5번에서 만든 요소에다가 assign 해주세요

7. 위 과정을 오른쪽 손에도 해주세요. 


Controllers as Hands 에 Hand Grab Interactor를 추가하는 방법 

1. Controllers as Hands를 가지고 있는 씬을 엽니다. 

2. 프로젝트에서 HandGrabInteractor를 찾아 ControllerHands > LeftControllerHand > ControllerHandInteractors 

에 자식으로 부착합니다. (아래 사진 처럼)

3. Hierarchy 에서 LeftControllerHand > ControllerHandInteractors 를 선택합니다.

4. 인스펙터에서 Best Hover Interactor Group 컴포넌트를 찾아 Interactors 리스트 요소를 추가합니다. 

5. HandGrabInteractor를 요소로서 집어넣어 줍니다. (아래 사진 처럼)

6. 이 과정을 오른쪽 손에도 반복해주십시오. 


Controllers  에 Hand Grab Interactor를 추가하는 방법 

1. Controllers가 있는 씬을 엽니다. 

2. 프로젝트에서 ControllerGrabInteractor를 검색하여, 나온 프리팹을 Controllers > LeftController > ControllerInteractors 

에 자식으로 부착합니다. (아래 사진 처럼)

3. Hierarchy 에서 LeftController > ControllerInteractors 를 선택합니다. 

4. 인스펙터에서 Best Hover Interactor Group 컴포넌트를 찾아 Interactors 리스트 요소를 추가합니다. 

5. ControllerGrabInteractor 를 요소로서 리스트에 추가합니다. (아래 사진 처럼)

6. 위와 같은 과정을 오른손에도 해줍니다. 

 


Grab Interactable 추가하기 (잡기 가능 하도록 하는 기능 추가)

사용자가 물체를 잡으려면 잡으려는 물체에 이 기능을 부여가 되어 있어야 합니다. 

2가지 타입에 잡기 기능(Grab Interactable)이 있는데,

1.controllers 만 사용하여, 잡을 때 사용하는 잡기 기능

2. hands와 controllers as hans를 사용하여 잡을 때 사용하는 잡기 기능이 있습니다. 

 

만약 여러분이 1번에 경우를 원하면, Grab Interactable 컴포넌트가 필요하고

2번에 경우를 원하면, Hand Grab Interactable 컴포넌트가 필요합니다. 

 

간단하게 만들어 보기 위해 Cube를 이용하여 Grab Interactable 오브젝트를 만들어 보겠습니다. 

1. 씬에 큐브를 추가합니다.

2. Hierarchy 에서 큐브를 선택합니다. 

3. 인스펙터에서, Transform 컴포넌트의 요소 Scale 값 x,y,z를 모두 0.1로 바꾸어 줍니다. 

4. 씬에서 큐브를 카메라 앞에 위치시킵니다. 

5. 다시 큐브를 선택합니다. 

6. 인스펙터에서 RigidBody와 Grabbable 컴포넌트를 추가합니다. 

Grabbable에 대해 더 자세히 알고 싶으시면 아래 링크를 참고해주세요.

https://developer.oculus.com/documentation/unity/unity-isdk-grabbable/

 

Grabbable | Oculus Developers

 

developer.oculus.com

7. Grabbable 컴포넌트에서 Transfer on Second Selection 을 선택합니다. 이 기능을 선택하면, 다른 한 손이 잡고 있는 동안, 다른 손으로 잡으면, 손과 손 사이에 이동이 가능하게 됩니다.

8. 큐브의 Box Collider 컴포넌트에서 isTrigger를 체크합니다. 이렇게 하면, 물체를 놓았을때, Cube가 멀어지는 것을 막을 수 있습니다. 

9. RigidBody 컴포넌트에서, Use Gravity를 사용하지 않음으로 변경합니다. 

10. Cube를 선택합니다. 

11.

# 만약 여러분이 Hands나 controllers as hands를 사용한다면, 큐브의 인스펙터에 Hand Grab Interactable 컴포넌트를 부착합니다. 

# 만약 여러분이 controllers 를 사용한다면, 큐브의 인스펙터에 Grab Interactable 컴포넌트를 추가합니다. 

12. Grab Interactable 컴포넌트나 Hand Grab Interactable 컴포넌트 에서 Pointable Element와 RigidBody를 세팅합니다.

13. Build And Run을 하거나,  Oculus Link 를 통해 플레이 해보세요. 

 

이렇게 하면, 위 영상처럼 물체를 잡을 수 있습니다.