Inverse3 및 VerseGrip 커서
Haply Inverse Unity Package은(는) Inverse3 및 VerseGrip 디바이스를 위한 전용 커서 컴포넌트를 제공하여, Unity 환경에서 정밀한 제어와 상호작용을 가능하게 합니다. 이 컴포넌트인 Inverse3 Cursor와 VerseGrip Cursor는 해당 Device Controllers의 데이터를 기반으로 게임 오브젝트의 위치와 회전을 동적으로 조정하도록 설계되었습니다.
개요
커서 컴포넌트는 물리적인 Haply 디바이스와 Unity의 가상 게임 오브젝트를 연결하는 다리 역할을 하며, 디바이스의 위치 및 회전 데이터를 게임 오브젝트의 움직임과 방향으로 변환합니다. 이러한 변환을 통해 사용자는 직관적인 방식으로 가상 환경과 상호작용할 수 있으며, 실제 움직임이 가상의 반응으로 그대로 반영됩니다.
CursorBase 클래스
커서 컴포넌트의 핵심에는 CursorBase 클래스가 있으며, 이 클래스는 Inverse3Cursor와 VerseGripCursor가 공통으로 사용하는 기본 기능을 제공합니다.
여기에는 디바이스 연결 관리, 모델 인스턴스화, 가시성 제어가 포함됩니다.
주요 속성 및 메서드
- Device: 커서를 제어하는 디바이스와 연결하며, 런타임에 자동으로 설정됩니다.
- ModelPrefab: 커서 모델에 사용할 프리팹을 지정합니다. 이 프리팹은
ModelParent의 자식으로 자동 인스턴스화됩니다. - ModelParent: 인스턴스화된 모델 프리팹의 부모 트랜스폼을 정의합니다. 설정하지 않으면 커서의 트랜스폼이 기본값으로 사용됩니다.
- Model: 씬에 있는 기존 커서 모델을 직접 참조합니다. 설정하면
ModelPrefab의 인스턴스화를 건너뜁니다. - HideControllerModel: 커서 모델의 가시성을 제어하며, 게임플레이 요구 사항에 따라 동적으로 표시하거나 숨길 수 있습니다.
- Radius: 커서 모델이 구체인 경우 그 반지름을 나타내며, 모델의 메시 경계로부터 계산됩니다.
- Smoothness:
PositionSmoothness와RotationSmoothness는 커서의 위치와 회전을 부드럽게 만드는 옵션을 제공하여 사용자 경험을 향상시킵니다.
참고: 예기치 않은 동작을 방지하려면 Cursor 컴포넌트에서 Cursor Model을 올바르게 참조하는 것이 매우 중요합니다.

Haptic Rig로 생성된 기본 Cursor Model에는 세 축을 나타내는 색상 점이 표시됩니다: Forward(파란색), Up(초록색), Right(빨간색). 이 디자인은 가상 환경에서 디바이스의 방향을 시각적으로 파악하는 데 도움이 됩니다. 보정된 VerseGrip의 경우, Forward는 가리키는 방향과 일치해야 하며, Up은 상단 면과 일치해야 합니다.
Inverse3 Cursor 컴포넌트
Inverse3Cursor는 Inverse3 디바이스에 특화되어 있으며, Unity에서 커서의 로컬 위치를 디바이스의 실제 위치에 맞게 업데이트합니다.
PositionSmoothness 설정으로 커서 움직임의 부드러움을 조정할 수 있으며, 실제 움직임에 대한 커서의 반응성을 제어하여 사용자 경험을 향상시킵니다.
VerseGrip Cursor 컴포넌트
VerseGripCursor는 VerseGrip 디바이스로 기능을 확장하며, Unity에서 커서의 회전을 디바이스의 실제 회전에 맞게 업데이트합니다.
useDeviceLocalSpace 설정을 사용하면 월드 또는 부모 오브젝트 방향 중에서 커서 정렬 방식을 선택할 수 있어 디자인의 유연성이 높아집니다.
RotationSmoothness 설정은 커서 회전의 부드러움을 제어하며, 개발자가 실제 VerseGrip 방향 변화에 대한 커서의 반응성을 세밀하게 조정할 수 있게 합니다.
구현 세부 사항
초기화 시 Model이 할당되지 않은 경우, 커서 컴포넌트는 지정된 ModelPrefab을 ModelParent의 자식으로 인스턴스화하여 씬에서 시각적으로 표현되도록 합니다.
이 컴포넌트들은 연결된 Device Controllers와 동기화되어, 실제 디바이스의 움직임에 맞춰 커서의 위치와 회전을 실시간으로 조정합니다.
두 컴포넌트는 같은 GameObject에 연결하여 해당 오브젝트의 위치와 회전을 제어하거나, 용도에 따라 별도의 GameObject에 연결할 수 있습니다. 이를 통해 개발자는 Unity에서 몰입감 있는 햅틱 경험을 구현하기 위한 다목적 도구를 활용할 수 있습니다.