Grabbable
VR/Oculus Integration 2023. 12. 18. 11:11
https://youtube.com/playlist?list=PLTFRwWXfOIYB9hru6EjeVS0E-4jNiOuQQ&si=zoJ3NoYX6YrGnpg1
Grabbable 구성 요소는 상호 작용할 때 GameObject를 회전, 크기 조정 또는 변형시키는 것입니다.
GameObject의 회전, 크기 조정 또는 변형 방법을 결정하기 위해 Grabbable은 Transformer 구성 요소를 사용합니다.
Transformer 구성 요소는 One Hand Grab Transformer(한 손만 필요)와 Two Hand Grab Transformer(양손 필요)의 두 가지 주요 범주로 나뉩니다.
OnEnable()을 호출하려면 먼저 Forward Element 속성을 설정해야 합니다.
Transfer on Second Selection
이 옵션을 선택하면 한 손으로 물체를 잡은 다음 다른 손으로 잡는 경우 원래 손이 강제로 물체를 놓게 됩니다.
Add New Points to Front
이 옵션을 선택하면 개체를 잡을 때 해당 손의 Vector3 포인트가 Vector3 포인트 목록의 끝이 아닌 시작 부분에 추가됩니다.
이 속성은 매우 독특한 사용 사례를 가지므로 대부분의 경우 두 번째 선택 시 전송 속성을 대신 사용해야 합니다.
Max Grab Points
최대 잡기 포인트 수입니다. -1(무제한), 1 또는 2일 수 있습니다.
Forward Element (optional)
이벤트가 이 요소로 전달됩니다. 여러 PointableElement를 함께 연결하는 데 사용할 수 있습니다.
One Grab Transformer (optional)
잡을 수 있는 개체에 연결해야 하는 One Grab...Transformer 구성 요소입니다.
기본값은 One Grab Free Transformer입니다.
Two Grab Transformer 속성을 설정했지만 여전히 한 손으로 잡기를 원하는 경우 이 속성도 설정해야 합니다.
Two Grab Transformer (optional)
잡을 수 있는 개체에 연결해야 하는 Two Grab...Transformer 구성 요소입니다.
이 속성을 설정했지만 한 손으로 잡기를 원하는 경우 One Grab Transformer 속성을 설정해야 합니다.
Target Transform (optional)
Grabbable 구성 요소가 있는 개체를 변환하는 대신 변환할 대상 개체를 사용합니다.
Grabbable 구성 요소가 있는 개체는 변환을 대상 개체에 투영하는 컨트롤러 역할을 합니다.
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
이 변환기는 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://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 |