Grabbable

VR/Oculus Integration 2023. 12. 18. 11:11
반응형

 
https://youtube.com/playlist?list=PLTFRwWXfOIYB9hru6EjeVS0E-4jNiOuQQ&si=zoJ3NoYX6YrGnpg1

Unity VR with Oculus Integration 57.0

Unity VR with Oculus Integration

www.youtube.com



Grabbable 구성 요소는 상호 작용할 때 GameObject를 회전, 크기 조정 또는 변형시키는 것입니다.
GameObject의 회전, 크기 조정 또는 변형 방법을 결정하기 위해 Grabbable은 Transformer 구성 요소를 사용합니다.
 
Transformer 구성 요소는 One Hand Grab Transformer(한 손만 필요)와 Two Hand Grab Transformer(양손 필요)의 두 가지 주요 범주로 나뉩니다.
 

핸드 그랩 변압기의 종류. 이름이 "OneHand..."로 시작하는 트랜스포머에는 한 손만 필요합니다. 이름이 "TwoHand..."로 시작하는 트랜스포머에는 양손이 필요합니다.

 
 
 
OnEnable()을 호출하려면 먼저 Forward Element 속성을 설정해야 합니다.
 
 
Transfer on Second Selection
이 옵션을 선택하면 한 손으로 물체를 잡은 다음 다른 손으로 잡는 경우 원래 손이 강제로 물체를 놓게 됩니다.
 
 

Transfer on Second Selection

 


 
Add New Points to Front
이 옵션을 선택하면 개체를 잡을 때 해당 손의 Vector3 포인트가 Vector3 포인트 목록의 끝이 아닌 시작 부분에 추가됩니다.
이 속성은 매우 독특한 사용 사례를 가지므로 대부분의 경우 두 번째 선택 시 전송 속성을 대신 사용해야 합니다.
 

Add New Points to Front

 
 


Max Grab Points
최대 잡기 포인트 수입니다. -1(무제한), 1 또는 2일 수 있습니다.
 

Max Grab Points

 


Forward Element (optional)
이벤트가 이 요소로 전달됩니다. 여러 PointableElement를 함께 연결하는 데 사용할 수 있습니다.

Forward Element (optional)

One Grab Transformer (optional)
 
잡을 수 있는 개체에 연결해야 하는 One Grab...Transformer 구성 요소입니다.
기본값은 One Grab Free Transformer입니다.
Two Grab Transformer 속성을 설정했지만 여전히 한 손으로 잡기를 원하는 경우 이 속성도 설정해야 합니다.

One Grab Transformer (optional)

 
 


Two Grab Transformer (optional)
잡을 수 있는 개체에 연결해야 하는 Two Grab...Transformer 구성 요소입니다.
이 속성을 설정했지만 한 손으로 잡기를 원하는 경우 One Grab Transformer 속성을 설정해야 합니다.

Two Grab Transformer (optional)

 
 


Target Transform (optional)
 
Grabbable 구성 요소가 있는 개체를 변환하는 대신 변환할 대상 개체를 사용합니다.
Grabbable 구성 요소가 있는 개체는 변환을 대상 개체에 투영하는 컨트롤러 역할을 합니다.
 

Target Transform (optional)

 


 

One Grab Transformers

Grabbable 구성 요소의 One Grab Transformer 속성에 One Grab Transformer 구성 요소를 할당해야 합니다.
 
 
One Grab Transformer의 종류는 다음 4가지가 있음 

 


OneGrabFreeTransformer
Pointable 이벤트를 사용하여 Grabbable의 위치와 회전을 일대일로 업데이트합니다.
이는 Grabbable에 할당된 기본 Transformer 동작입니다.
 


 
OneGrabTranslateTransformer
Grabbable의 위치만 업데이트합니다(선택적 제약 조건 포함).
 
Interactable 구조 

 
 
 
최상위 오브젝트 Pin01에는 Grabbable, Rigidbody, One Grab Translate Transformer 컴포넌트 부착 
 

 
Constraints 프로퍼티를 이용해 이동 제한 하기 

 
 
 
다음은 자식 오브젝트 GrabInteractable 

 
 
GrabInteractable  컴포넌트 부착 (컨트롤러)

 
 
자식으로 Hands 또는 Controller as Hands 일경우 HandGrabInteractable컴포넌트 부착 

 
 
 
자식으로 PinMesh (실제 비주얼)

 
다음 컴포넌트 부착 
Mesh Filter 
Mesh Renderer 
Mesh Collider 
Interactable Color Visual    
Material Property Block Editor 
Interactable Group View 
 

 
 
 
Interactable Color Visual 컴포넌트에서 선택시 색상을 변경하는 역할을 함 (디버깅 용도로 사용해도 좋을듯)

 
 
 


 
OneGrabRotateTransformer
주어진 축을 중심으로 Grabbable의 회전만 업데이트합니다(선택적 제약 조건 포함).
 

 

 
 
Box는 빈오브젝트

 
 
BoxBase는 아래쪽 메쉬 

 
 
 
 
 
Hinge는 빈오브젝트 Rigdbody만 붙어 있음 
 

 

 
자식으로 빈오브젝트 BoxLid 

컴포넌트 부착 
Grabbable, Rigidbody 
One Grab Rotate Transformer 
Mesh Filter , Mesh Renderer 
Material Property Block Editor, Interactable Color Visual, Interactable Group View 

 
 
 
Grabbable 

 
 
One Grab Rotate Transformer

 
Rigidbody 

 
 
 
 
Mesh Filter 

 
 

 
 
 
Mesh Renderer 

 
 
Mesh Collider 

 
 
Material Property Block Editor 

 
 
 
 
Interactable Color Visual 
 

 
 
 
Interactable Group View 

 
 
 
 
 
GrabInteractable
 

 
 
HandGrabInteractable

 
 
 
 
 
Audio 

 
 
 
 
ComplexGrabBoxGrabAudio

 
 
 
 
ComplexGrabBoxReleaseAudio

 
 
 
 
ComplexGrabBoxOpenClose


 
 
OneGrabPhysicsJointTransformer
 

Unity Physics Joints를 통해 Grabbable을 연결합니다. 기본적으로 이는 고정 조인트(FixedJoint)를 사용하지만 사용자 정의 ConfigurableJoint를 사용하도록 설정할 수 있습니다.

 
이 변환기는 Grabbable이 변환 중에 환경과 계속 충돌(비운동학적)해야 하는 물리적 개체일 때 유용합니다.
또는 잡을 수 있는 물리 문이나 레버의 경우에서 흔히 볼 수 있는 것처럼 물리 조인트를 통해 환경에 부착되는 경우도 있습니다.
 
옵션인 ConfigurableJoint를 사용하면 관련 없는 모션을 Free로 설정하고 사전 처리와 같은 다른 기능을 사용할 수 있습니다. 이는 사용자 정의 동작을 생성하는 데 도움이 되고 가끔 발생하는 물리적 결함을 제거할 수 있습니다. 이 선택적 ConfigurableJoint는 런타임 중에 복사되므로 비활성화된 GameObject에 배치해야 합니다.
 
조인트에 대한 참고 영상 
https://www.youtube.com/watch?v=MElbAwhMvTc
 
 
 
Cube를 하나 만들고 

 
리지드바디를 추가 하고 Is Kinematic을 체크 합니다 
이제 내가 직접 옮기는것 이외 다른 강체로 인해 Cube는 이동 할수 없습니다.

 
 
Cube를 복사 하고 

 
Is Kinematic을 해제 합니다 

 
 
 
 
이어서 고정 조인트 컴포넌트를 추가 합니다 

 
 
 
처음에 만든 Cube의 이름을 연결된 강체로 바꿔줍니다 

 
 
 
두번째 큐브를 선택하고 Fixed Joint 컴포넌트의 Connected Body 프로퍼티에 넣어 줍니다.

 
 
 
 
3번째 큐브를 만들고 

Rigidbody를 부착후 Use Gravity를 체크 해제 합니다

 

 
두번째 큐브를 선택하고 

 
 
Fixed Joint 컴포넌트의 Break Force 와 Break Torque 프로퍼티의 값을 10으로 설정한뒤 

 
 
 
플레이 하고 3번째 큐브로 충돌을 일으켜 보면 2번째 큐브가 분리 되는것을 확인 할수 있습니다.

 
 
 
두번째 큐브를 선택하고 Fixed Joint를 제거 후 

Spring Joint컴포넌트를 부착 합니다 
 

 
 
 
 
연결된 바디를 설정후 

 
스크링 수치를 높게 하고 실행 하면 

 
 
두번째 큐브를 선택하고 Spring Joint를 제거후 Hinge Joint컴포넌트를 부착 합니다 

 

 
 
연결된 강체를 통해 함께 이동 할수도 있습니다.

 
 
 
 


Unity Tutorial - Configurable Joint Hang Man

https://www.youtube.com/watch?v=pIwZRBdp89g

 
리소스 
책상과 서랍 
https://assetstore.unity.com/packages/3d/pbr-georgian-desk-and-chair-90192
문 
https://assetstore.unity.com/packages/3d/props/metal-door-5397
 
 
참고 
https://docs.unity3d.com/kr/2022.1/Manual/class-ConfigurableJoint.html
https://docs.unity3d.com/Manual/class-ConfigurableJoint.html
https://www.youtube.com/watch?v=cx2aGKdbyhU
 
https://developer.oculus.com/documentation/unity/unity-isdk-grabbable/

반응형

'VR > Oculus Integration' 카테고리의 다른 글

OneGrabPhysicsJointTransformer  (0) 2023.12.20
Grabbable (Two Grab Transformers)  (0) 2023.12.19
FingerFeatureStateThresholds  (0) 2023.12.14
Unity VR Build a Custom Hand Pose (Oculus Integration SDK)  (0) 2023.12.14
Create Snap Interactions  (0) 2023.12.12
: