Inverse3 と VerseGrip のカーソル
Haply Inverse Unity Package には、Inverse3 デバイスおよび VerseGrip デバイス向けの専用カーソルコンポーネントが含まれており、Unity 環境内での正確な制御とインタラクションを実現できます。 これらのコンポーネント(Inverse3 Cursor および VerseGrip Cursor)は、対応する デバイスコントローラー から受け取ったデータに基づいて、ゲームオブジェクトの位置と回転を動的に調整するように設計されています。
概要
カーソルコンポーネントは、物理的な Haply デバイスと Unity 内の仮想ゲームオブジェクトを橋渡しする役割を果たし、デバイスの位置および回転データをゲームオブジェクトの移動と向きに変換します。 この変換により、ユーザーは直感的に仮想環境と対話でき、物理的な動きが仮想空間での反応として再現されます。
CursorBase クラス
カーソルコンポーネントの中核となるのは CursorBase クラスで、Inverse3Cursor と VerseGripCursor の両方で共有される基本機能を提供します。
これには、デバイスの関連付け、モデルのインスタンス化、表示制御の管理が含まれます。
主要なプロパティとメソッド
- Device: カーソルを制御するデバイスに関連付けます。実行時に自動的に設定されます。
- ModelPrefab: カーソルモデル用のプレファブを指定します。このプレファブは
ModelParentの子として自動的にインスタンス化されます。 - ModelParent: インスタンス化されたモデルプレファブの親トランスフォームを定義します。設定されていない場合は、カーソルのトランスフォームがデフォルトになります。
- Model: シーン内の既存のカーソルモデルを直接参照します。設定すると、
ModelPrefabのインスタンス化は行われません。 - HideControllerModel: カーソルモデルの表示状態を制御します。ゲームプレイの要件に応じて、表示と非表示を動的に切り替えることができます。
- Radius: カーソルモデルが球体の場合の半径を表します。モデルのメッシュバウンディングから計算されます。
- Smoothness:
PositionSmoothnessとRotationSmoothnessは、カーソルの位置と回転を滑らかにするためのオプションを提供し、ユーザー体験を向上させます。
注: カーソルコンポーネントでカーソルモデルを正しく参照することは、予期しない動作を避けるうえで重要です。

ハプティックリグ で作成されるデフォルトのカーソルモデルには、3 つの軸を表す色付きのドットがあります。Forward(青)、Up(緑)、Right(赤)です。 この設計により、仮想環境内でのデバイスの向きを視覚的に把握しやすくなります。キャリブレーション済みの VerseGrip では、Forward が指差し方向に、Up が上面に合うようにします。
Inverse3 Cursor コンポーネント
Inverse3Cursor は Inverse3 デバイス専用で、デバイスの物理的な位置を反映するように、Unity 内のカーソルのローカル位置を更新します。
PositionSmoothness 設定では、カーソルの移動の滑らかさを調整できます。物理的な動きに対するカーソルの応答性を制御することで、ユーザー体験を向上させます。
VerseGrip Cursor コンポーネント
VerseGripCursor は VerseGrip デバイスに機能を拡張するもので、デバイスの物理的な回転を反映するように、Unity 内のカーソルの回転を更新します。
useDeviceLocalSpace 設定により、ワールドまたは親オブジェクトの向きのどちらに合わせるかを選択できるようになり、設計の柔軟性が向上します。
RotationSmoothness 設定はカーソルの回転の滑らかさを制御します。これにより、開発者は物理的な VerseGrip の向きの変化に対するカーソルの応答性を細かく調整できます。
実装の詳細
初期化時に、Model が割り当てられていない場合、カーソルコンポーネントは指定された ModelPrefab を ModelParent の子としてインスタンス化し、シーン内での視覚的な表現を確保します。
これらのコンポーネントは、関連する デバイスコントローラー と同期し、物理デバイスの動きに合わせてカーソルの位置と回転をリアルタイムで調整します。
両方のコンポーネントを同じ GameObject にアタッチして位置と回転を制御することも、用途に応じて別々の GameObject にアタッチすることもできます。これにより、開発者は Unity で没入感のあるハプティック体験を作成するための、柔軟なツールを利用できます。