Interaction SDK 샘플 - 2024-Adoor/practice GitHub Wiki
스냅되어 붙는 목표에 SnapInteractable
을 쓰고, 스냅하는 오브젝트에 SnapInteractor
를 쓴다. 뭔가 다른 인터랙션들과 관계가 반대인 것 처럼 느껴지는데... 뭐가 다른 포인트일까?
스냅이 작용하는 영역: SnapInteractable의 Rigidbody 프로퍼티에 할당된 오브젝트의 콜라이더가 기준이다. 이 샘플에서는 아주 넓은 콜라이더를 사용하고 있는데, 단순히 공간 안으로 들어간다고 스냅되는게 아니기 때문인 것 같다. (방향이 중요하다?) -- 참고로 SnapInteractable의 optional 란에 이 방향과 관련한 더 자세한 프로퍼티가 있는 것 같다.
Rigidbody가 있는 오브젝트의 콜라이더는 당연하지만 중력이 해제되어야 한다. 특이한 점은 샘플의 리지드바디는 키네마틱이 켜져 있었는데 켜는게 어떤 의미를 하는진 모르겠다. 본 프로젝트에서 테스트할 당시에는 꺼도 일단 눈에 보이는 이상이 없었다.
Move Towards Target Provider
- 샘플에서는 SnapInteratable 오브젝트에 SnapInteractable 컴포넌트와 같이 붙어 있었다. 스냅이 시작될 때 얼마나 빨리 붙는지, 그런걸 정하는 것으로 보인다.
Interactable Color Visual
- 아마도 다른 인터랙션과 공용일 것 같다. Interaction SDK - Interactor Interactable Lifecycle
에 있는 것처럼 인터랙션이 가지는 상태를 기반으로 머티리얼의 색상을 바꾸는 용도. 샘플에서는 알파값을 사용해 투명도를 조절한다.
위는 Material Property Block Editor를 필요로 한다. Material Property Block은 유니티의 기능인 것 같은데 자세히 알아보진 않았다.
SnapInterator 컴포넌트 - Pointable Element 프로퍼티엔 Grabbable 프로퍼티가 필요하다.
특이사항으론 HandGrabInteractable (아마도 퀵 액션으로 생성하는) 이름 끝에 _mirror 가 붙은 오브젝트가 하나 더 있는데, 용도 불명이다. (그냥 오브젝트랑 다른 점은 위치와 Scaled Hand Grab Poses라는 프로퍼티 뿐이다)
Interactor Debug Visual
- 위 Interactable Color Visual의 Interactor 버전이라고 봐도 될 것 같다. 샘플에서는 비활성화된 상태로 붙어있기만 함, 또한 렌더러 프로퍼티가 비어있어서 직접 할당해 줘야 함
Interactor Unity Event Wrapper
- 이것도 상태 기반인거 보니 공용일 것 같다. 상태 변할 때 이벤트 호출.
TransformerExamples 장면은 Grabbables를 통해 오브젝트에 물리, 트랜스포머, 제약을 추가한 GrabInteractor 및 HandGrabInteractable(각각 컨트롤러용 및 손용)을 보여줍니다.
- 지도는 평면 제약이 적용된 이동 전용 grabbable 오브젝트를 보여줍니다.
- 돌 보석은 두 손으로 집어 들고, 던지고, 변형하고, 크기를 조정할 수 있는 물리적 오브젝트를 보여줍니다.
- 상자는 한 손으로 회전하는 변환 제약을 보여줍니다.
- 인형은 손을 잡을 때 숨기는 기능을 보여줍니다.
참고 자료:
🔗 이 부분은 Feature Scenes을 바탕으로 합니다.
- DebugGesture는 앞으로 스와이프하는 제스처와 함께 사용되는 디버그 비주얼을 보여줍니다. 양손으로 제스처를 수행하면 트리의 노드가 빨간색(비활성)에서 녹색(활성)으로 변경되는 것을 관찰할 수 있습니다.
- DebugPoke는 Poke 인터랙션의 상태를 시각화하는 데 사용할 수 있는 디버그 컴포넌트 뿐만 아니라 poke limiting 중 추적된 손을 시각화합니다.
*poke limiting: 손이 가상 물체를 누를 때 모델을 통과하는 것처럼 보이지 않도록 실제 손과 다르게 조절해서 보여주는 것- DebugPose는 엄지손가락을 치켜드는 포즈와 함께 디버그 비주얼을 보여줍니다. 양손으로 포즈를 취하면 트리의 노드가 빨간색(비활성)에서 녹색(활성)으로 바뀌는 것을 관찰할 수 있습니다.
- DebugRay는 Ray 인터랙션의 상태를 시각화하는 데 사용할 수 있는 디버그 컴포넌트를 보여줍니다.
- HandGrab은 스냅할 손 포즈가 미리 기록된 여러 개의 잡기 위치가 있는 단일 오브젝트를 보여줍니다.
- PokeButton은 누를 수 있는 버튼 비주얼이 있는 단일 PokeInteractable을 보여줍니다.
- PokeCanvas는 터치 제한이 있는 평면 Unity 캔버스에서 Poke Interaction을 시연합니다.
- RayCanvasCurved 는 곡선형 Unity 캔버스에서 Ray Interaction을 시연합니다.
- RayCanvasFlat은 평면 Unity 캔버스에서 Ray Interaction을 시연합니다.
- TouchHandGrab은 동적 잡기 포즈로 잡을 수 있는 단일 물리적 오브젝트를 보여줍니다.
- DebugBodyJoints는 바디 스켈레톤의 디버그 시각화를 보여줍니다.
- DebugBodyPoseComparer는 런타임에 바디 포즈를 캡처하고 비교하는 방법을 보여 주며, BodyPoseComparerActiveState의 각 관절을 시각화하여 보여줍니다.