Inverse3 및 VerseGrip 커서
Haply 의 Inverse Unity 패키지는 Inverse3 및 VerseGrip 기기를 위한 전용 커서 컴포넌트를 제공하여, Unity 환경 내에서 정밀한 제어와 상호작용을 가능하게 합니다. Inverse3 커 서와 VerseGrip 커서라는 이 컴포넌트들은 게임 오브젝트의 위치와 회전을 해당 기기 컨트롤러의 데이터에 맞춰 동적으로 조정합니다.
개요
커서 컴포넌트는 물리적 장치 Haply 와 Unity의 가상 게임 오브젝트 사이의 가교 역할을 합니다. 이 컴포넌트는 장치의 위치 및 회전 데이터를 게임 오브젝트의 움직임과 방향으로 변환합니다. 이러한 변환을 통해 사용자는 물리적 움직임이 가상 반응으로 반영되도록 하여 가상 환경과 직관적으로 상호작용할 수 있습니다.
CursorBase 클래스
커서 구성 요소의 핵심을 이루는 것은 다음 클래스입니다. CursorBase, 이는 다음과 같은 기본 기능을 제공하는 것으로, Inverse3Cursor 그리고 VerseGripCursor 함께 활용합니다.
여기에는 장치 연결 관리, 모델 인스턴스화, 가시성 제어가 포함됩니다.
주요 속성과 메서드
- 장치: 커서를 제어 장치에 연결하며, 실행 시 자동으로 설정됩니다.
- 모델 프리팹: 커서 모델에 대한 프리팹을 지정하며, 이 프리팹은 자동으로
ModelParent인스턴스화됩니다. - ModelParent: 인스턴스화된 모델 프리팹의 상위 트랜스폼을 지정합니다. 이 속성이 설정되지 않은 경우, 기본적으로 커서의 트랜스폼이 사용됩니다.
- 모델: 해당 씬에 이미 존재하는 커서 모델을 직접 참조합니다. 이 필드가 설정되어 있으면,
ModelPrefab건뜀. - HideControllerModel: 커서 모델의 표시 여부를 제어하며, 게임의 요구 사항에 따라 이를 동적으로 표시하거나 숨길 수 있게 해줍니다.
- 반지름: 커서 모델이 구형인 경우, 해당 모델의 반지름을 지정합니다. 이 값은 모델의 메시 경계로부터 계산됩니다.
- 부드러움:
PositionSmoothness그리고RotationSmoothness커서의 위치와 회전을 부드럽게 조정할 수 있는 옵션을 제공하여 사용자 경험을 향상시킵니다.
참고: 예기치 않은 동작을 방지하려면 커서 컴포넌트 내에서 커서 모델을 올바르게 참조하는 것이 매우 중요합니다.

Haptic Rig를 사용하여 생성된 표준 커서 모델은 세 가지 축, 즉 전방 (파란색), 상방 (초록색), 우측 (빨간색)을 나타내는 색상 점들을 표시합니다. 이를 통해 가상 환경에서 기기의 방향을 더 쉽게 시각화할 수 있습니다. 보정된 VerseGrip의 경우, 전방 축은 포인터의 방향과 일치해야 하며, 상방 축은 기기의 윗면과 일치해야 합니다.
Inverse3-커서 구성 요소-
Inverse3Cursor Inverse3 기기에 특별히 최적화되어 있으며, Unity 내 커서의 로컬 위치를 기기의 물리적 위치가 반영되도록 업데이트합니다.
태도 PositionSmoothness 커서 움직임의 부드러움을 조절할 수 있게 해줍니다. 이를 통해 신체 움직임에 대한 커서의 반응성을 조절함으로써 사용자 경험을 향상시킵니다.
VerseGrip 커서 구성 요소
VerseGripCursor VerseGrip 기기의 기능을 확장하고, Unity에서 커서의 회전 방식을 기기의 실제 회전 상태를 반영하도록 업데이트합니다.
태도 useDeviceLocalSpace 세계 방향과 상위 객체의 방향 중에서 선택할 수 있게 해줍니다. 이를 통해 디자인의 유연성이 높아집니다.
태도 RotationSmoothness 커서 회전 시의 부드러움을 조절하며, 개발자가 VerseGrip의 물리적 방향 변화에 대한 커서의 반응성을 정밀하게 조정할 수 있게 해줍니다.
구현 세부 사항
초기화 과정에서 커서 구성 요소들은 지정된 ModelPrefab ~의 하위 객체로서 ModelParent, 단 Model 할당되지 않았습니다. 이를 통해 장면 내의 시각적 표현이 보장됩니다.
이 컴포넌트들은 관련 장치 컨트롤러 그리고 커서의 위치와 회전을 기기의 물리적 움직임에 맞춰 실시간으로 조정합니다.
두 컴포넌트 모두 동일한 GameObject에 할당하여 해당 GameObject의 위치와 회전을 제어하거나, 서로 다른 용도에 따라 다른 GameObject에 할당할 수 있습니다. 이를 통해 개발자는 Unity에서 몰입감 넘치는 햅틱 경험을 제작할 수 있는 다재다능한 도구를 확보하게 됩니다.