MRTK는 Unity XR 상호 작용 도구 키트에서 제공하는 를 기반으로 XRBaseInteractable 합니다. 기존 상호 작용 가능한 동작 및 API는 MRTK에서 완전히 지원되며 모든 사용자 지정 상호 작용 가능 항목은 기존 XRI 상호 작용 가능한 API를 준수합니다.
XRI를 처음 사용하는 개발자의 경우 먼저 Unity XRI 아키텍처 설명서를 검토하는 것이 좋습니다.
XRI에 포함된 상호 작용 가능한 메커니즘을 확장하기 위해 MRTK는 고급 상호 작용을 빌드할 수 있는 두 가지 기본 클래스를 제공합니다. 하나는 다른 클래스를 확장합니다.
MRTKBaseInteractable : XRBaseInteractable- 이 클래스는 다양한 유형의 상호 작용기에 대한 필터링 및 플래그 지정을 제공합니다. 기본 XRI
XRBaseInteractable는 상호 작용기 형식MRTKBaseInteractable을 구분하지 않지만 일반적인 유형의 상호 작용이 발생하는지 확인하기 위한 편리한 함수를 제공합니다. 또는IsGrabSelected와 같은IsGazeHovered편리한 속성은 참여 상호 작용기가 지정된 인터페이스(해당IGazeInteractorIGrabInteractor또는 )를 구현하는지 여부를 쿼리하는 바로 가기입니다. 이러한 플래그는 또는interactorsSelecting목록을interactorsHovering반복하는 것보다 성능이 더 높습니다. 또한MRTKBaseInteractable는 개발자가 특정 입력 형식을 제외하려는 경우 특정 유형의 상호 작용기를 필터링/거부할 수 있습니다.
- 이 클래스는 다양한 유형의 상호 작용기에 대한 필터링 및 플래그 지정을 제공합니다. 기본 XRI
StatefulInteractable : MRTKBaseInteractable- 플래그 및 필터를 추가하고 상호 작용 가능한
StatefulInteractable에 추가 상태를 추가하지 않도록 하는 동안MRTKBaseInteractable토글 및 변수 선택과 같은 유용한 상태 저장 기능이 도입됩니다.
- 플래그 및 필터를 추가하고 상호 작용 가능한
상태 및 시각적 개체의 엄격한 분리
MRTK 2.x에서 상호 작용 가능 개체는 3D 단추 압축, 가리키기 효과 또는 클릭 시 색 변경 등 자체 시각적 효과를 구동하는 역할을 하는 경우가 많았습니다. 이 방법의 제한 사항은 상호 작용 논리가 시각적 개체에 밀접하게 바인딩된다는 것입니다. 시각적 개체를 다시 디자인하거나 단추의 다른 크기/모양/변위/등을 사용하려면 상호 작용 스크립트 자체를 변경해야 합니다.
MRTK3에서 상호 작용 가능 개체는 순수 상태 및 상호 작용입니다. 상호 작용 가능 개체는 내부 상태에 따라 시각적 변경 내용이나 효과를 렌더링하지 않습니다. 시각적 프레젠테이션 설정 간에 이식성이 뛰어난 상태 및 상호 작용 논리 모음입니다.
동일한 PressableButton 스크립트를 사용하여 squishy ball, 가압 가능한 "트랙 패드"와 같은 평면 또는 언론에서 네트워크 이벤트를 발행하는 추상 누름을 빌드할 수 있습니다. 스크립트는 PressableButton "어디에"있는지조차 신경 쓰지 않습니다. 캔버스 내부 또는 강체에 있을 수 있습니다.
시각적 개체를 구동하기 위해 별도의 "시각적 드라이버"를 사용하여 상호 작용 가능한 상태에서 상태를 폴링하고 적절한 피드백을 렌더링합니다.
StateVisualizer 는 상호 작용 가능한 상태에서 일반적인 시각적 피드백 효과를 유도하는 데 권장되는 로우 코드 방법이지만 개발자는 사용자 지정 시각적 드라이버를 자유롭게 작성할 수 있습니다. 예를 들어 단추 구성 요소는 일반적으로 고급 3D + 셰이더 기반 피드백 효과에 사용되지 StateVisualizer 만 코드에서 간단한 시각적 드라이버를 작성하는 방법을 보여 주는 예제 BasicPressableButtonVisuals 도 제공합니다.
변수 선택
StatefulInteractable기본 XRI 기능에 대한 가장 유용한 추가 기능은 변수 Selectedness에 대한 지원입니다. 기본 XRI 상호 작용 가능 개체는 선택되거나 선택되지 않지만 MRTK는 StatefulInteractable선택한 부동 소수점 부분일 수 있습니다.
이 개념은 거의 모든 형식의 입력이 더 이상 이진 상태가 아니므로 XR에서 작업할 때 유용합니다. 모션 컨트롤러에는 종종 아날로그 트리거(또는 아날로그 그립!)가 있고, 손 상호 작용은 변수 "꼬집기"를 제공할 수 있으며, 볼륨 누름 조작은 다양한 양으로 버튼이나 푸시 가능한 표면을 우울하게 할 수 있습니다. XR의 모든 곳에서 이러한 변수, 아날로그 상호 작용을 볼 수 있으며, MRTK는 개발자가 이러한 아날로그 입력을 기반으로 유쾌한 상호 작용을 구축하는 데 도움이 됩니다.
다양한 상호 작용기 및 유형의 상호 작용이 모두 상호 작용 가능 항목의 전체 선택성에 함께 기여할 수 있습니다. 특히, 구현 IVariableSelectInteractor 하는 모든 상호 작용기는 일반적으로 참여하는 모든 상호 작용기를 통해 아날로그 선택량에 max() 기여합니다. 이 변수 크기는 바닐라 스타일 상호 작용기에서 오는 이진 변수가 아닌 선택 항목과 결합됩니다.
와 같은 PressableButton파생 클래스의 경우 함수가 재정의 Selectedness() 되어 선택한 계산에 "성분"을 더 추가합니다. 구현 IPokeInteractor 하는 상호 작용기는 물리적 위치 및 상호 작용 가능 항목을 물리적으로 누르는 방법에 따라 Selectedness에 기여할 수 있습니다. 다른 파생 클래스는 다른 임의 형식의 선택을 도입할 수 있습니다.
MRTK가 제공하는 Selectedness() 상호 작용 가능 개체의 isSelected 경우 항상 "동의"합니다. 즉, 에서 해당 XRI isSelected 및 함께 제공되는 상호 작용기가 interactorsSelecting없으면 보다 SelectThreshold 큰 를 관찰 Selectedness() 하지 않습니다.
중요
사용자 지정 상호 작용 가능한 서브클래스는 XRIisSelected에서 완전히 연결이 끊어진 다른 값으로 재정 Selectedness 의할 수 있지만 상호 작용 가능 개체는 이를 수행하지 않으며 권장되지 않습니다. 일반적으로 해당 상호 작용기가 없는 상호 작용은 작성하지 않습니다. XRI 선택은 대부분의 경우 충분하며 빌드하는 모든 사용자 지정 상호 작용을 상호 작용기로 작성해야 합니다.
를 결정하는 새 메서드를 지원하는 사용자 지정 상호 작용 가능 개체를 Selectedness()만드는 경우 메서드를 재정의하고 새 선택 항목을 기존 선택량과 결합하기만 하면 됩니다. 또는 변수 선택을 수신 대기하는 다른 시각적 계층을 사용하는 StateVisualizer 경우 새 선택 유형에 따라 응답합니다.
XRI에 UGUI 이벤트 매핑
경우에 따라 마우스, 게임 패드 또는 터치 스크린 입력과 같은 UGUI 이벤트에 상호 작용 가능 개체가 응답하도록 하는 것이 좋습니다. UGUISelectable인 는 UGUIInputAdapterUGUI 이벤트를 수신하고 있는 경우 에 CanvasProxyInteractor전달합니다.
에서 CanvasProxyInteractor UGUI 이벤트에 UGUIInputAdapter대한 알림을 받으면 관련 상호 작용 가능 항목에 대해 동등한 XRI 작업을 실행합니다. UGUI 입력과 XRI 작업 간의 매핑은 다소 손실되며 활성 개발 영역입니다.
이 시스템을 사용하면 몰입형 플랫폼, 손, 모션 컨트롤러 및 3D 입력을 위해 빌드된 기존 XRI 상호 작용 가능 개체가 마우스 및 게임 패드와 같은 액세스 가능한 2D 컨트롤에 똑같이 잘 반응할 수 있습니다.