EasyCastleUNITY

OVR Grabbable 컴포넌트 탐구 본문

Oculus VR 탐구

OVR Grabbable 컴포넌트 탐구

EasyCastleT 2023. 10. 26. 16:09

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

 

Grabbable | Oculus Developers

 

developer.oculus.com

위 링크의 문서를 기준으로 작성했습니다. 

Oculus Integration SDK 57.0버전을 기준으로 작성되었습니다. 참고하여 주시기 바랍니다.

 

Grabbable 컴포넌트는 상호작용 할 때, 게임 오브젝트를 회전, 크기 조정 또는 변형시키는 기능을 제공합니다.

게임 오브젝트의 회전, 크기 조정, 변형 방법을 결정하기 위해, GrabbableTransformer 컴포넌트들을 사용합니다.

Transformer 컴포넌트들은 2개의 메인 카테고리로 분류할수 있는데, One Hand Grab Transformers (오직 한 손만 필요한 경우)와 Two Hand Grab Transformers (양손을 다 사용하는 경우), 이 2가지 카테고리가 있다. 

 

hand grab transformers의 타입들입니다. "OneHand..." 라고 시작하는 Transformers는 오직 한 손만 필요합니다.

"TwoHand..."이라고 시작하는 Transformers 는 두 손들이 필요합니다. 

 

Grabbable 컴포넌트는 아래의 속성들을 가지고 있습니다.

속성 설명
Transfer on
Second
Selection
이 속성을 선택하면, 한 손으로 물체를 잡은 다음 다른 손으로 잡는 경우, 원래 잡고 있던 손이 강제로 오브젝트를 놓게 됩니다. 
Add New
Points to Front
이 속성을 선택하면, 오브젝트를 잡을 때, 해당 손의 Vector3 points가 Vector3 points 리스트의 끝이 아닌 시작 부분에 추가됩니다, 이 속성은 매우 독특한 사용 사례를 가지므로 대부분의 경우, Transfer on Second Selection 속성을 대신 사용해야 합니다. 
Forward
Element
(optional)
이벤트가 이 요소로 전달됩니다. 여러 PointableElement를 함께 연결하는 데 사용할 수 있습니다. 
One Grab
Transformer
(optional)
Grabbable 오브젝트에 연결해야 하는 One Grab...Transformer 컴포넌트 입니다. 기본값은 One Grab Free Transformer 입니다. Two Grab Transformer 속성을 설정했지만 여전히 한 손으로 잡기를 원하는 경우, 이 속성도 설정해야 합니다. 
Two Grab
Transformer
(optional)
Grabbable 오브젝트에 연결해야 하는 Two Grab...Transformer 컴포넌트 입니다. 만약 여러분이 이 속성을 설정했지만, 한 손으로 잡는 것을 원하는 경우, 여러분은 반드시 One Grab Transformer 속성을 설정해주어야 합니다. 
Target
Transform
(optional)
Grabbable 컴포넌트가 있는 객체를 변환하는 대신 변환할 대상 객체를 사용합니다, Grabbable 컴포넌트가 있는 객체는 변환을 대사 객체에 투영하는 컨트롤러 역할을 합니다. 
Max Grab
Points
최대로 잡을 수 있는 포인트의 수 입니다. -1(무제한),1 또는 2일 수 있습니다. 

One Grab Transformers

여러분은 Grabbable 컴포넌트 안에 One Grab Transformer 속성에 이 One Grab Transformers 컴포넌트를 assign 해야만 합니다. 

OneGrabFreeTransformer

Pointable 이벤트를 사용하여 Grabbable의 위치와 회전을 1대1로 업데이트합니다.

이건 Grabbable에 디폴트로 assign이 되는 Transformer 입니다. 

OneGrabTranslateTransformer

Grabbable 오브젝트를 오직 위치만 업데이트 한다. (선택사항으로 이동범위를 제한 할 수 있다)

OneGrabRotateTransformer

Grabbable 오브젝트를 설정된 축을 기준으로 하여 회전을 업데이트 한다. (선택사항으로 회전범위를 제한 할 수 있다.)

OneGrabPhysicsJointTransformer

Unity Physics Joints를 통해 Grabbable을 연결합니다. 

기본적으로 이것은 Fixed Joint를 사용하지만 커스텀 ConfigurableJoint를 사용하도록 설정할 수 있습니다. 

 

이 Transformer는 Grabbable이 변형 중에 환경과 지속적으로 충돌(non-kinematic, 비 운동학적)해야 하는 물리적인 실체(entity)이거나 Grabbable이 물리적인 문(door)의 경우에서 흔히 발생하는 것처럼, 물리 조인트(Physics Joints)를 통해 환경에 연결될 때 유용합니다. 문 이외에 또다른 예로는 레버가 있습니다. 

 

선택사항이 ConfigurableJoint를 사용하면, 관련 없는 모션을 Free로 설정하고 사전 처리(pre-processing)과 같은 다른 기능을 사용할 수 있습니다. 사용자 정의 동작(custom behavior)을 생성하고 가끔 발생하는 물리적 결함을 제거하는 데 도움이 될 수 있습니다. 


Two Grab Transformers

여러분은 Grabbable 컴포넌트 안에 Two Grab Transformer 속성에 이 Two Grab Transformers 컴포넌트를 assign 해야만 합니다.

 

#주의점 : 만약 여러분이 Two Grab Transformer 컴포넌트를 추가하였다면, 더 이상 One Grab Transformer가 자동으로 생성되지 않기에, 사용하려면 One Grab Transformer를 설정을 해줄 필요가 있습니다. 

TwoGrabFreeTransformer

포인팅 가능한 두 대상의 위치 및 회전 반경을 고려하여 Grabbable 오브젝트의 위치, 회전, 크기를 매 순간 업데이트 합니다. (크기에 대한 선택적 제약 조건이 포함되어 있습니다.)

TwoGrabRotateTransformer

Pivot에 대한 두 개의 포인팅 가능한 대상의 회전 반경을 고려하여 Grabbable의 회전을 업데이트 합니다.(최소/최대 회전에 대한 선택적 제약 조건이 포함되어 있습니다.)

TwoGrabPlaneTransformer

주어진 평면에 대한 Grabbable의 위치와 크기뿐만 아니라 주어진 축에 대한 회전도 업데이트 합니다. (위치와 크기에 대한 선택적 제약 조건이 포함되어 있습니다.)