Inverse Unity Package 入門ガイド
このガイドでは、基本的な設定の概要を説明するとともに、Haply のInverse Unityパッケージの基本的な使い方を示す簡単な例を紹介します。これには、パッケージのインストール、ハプティックリグの構築、および力制御と位置制御のための簡単なスクリプトの作成が含まれます。
詳細な情報や高度なテクニックについては、チュートリアルをご覧ください。
対応バージョン
- Unity 2021.3.x LTS:対応
- Unity 2022.1.x LTS:対応
- Unity 6000.x LTS:対応
- Haply Inverse SDK:3.1.0 以降
前提条件
- インストール Haply Inverse SDK 3.1.0 以降。
- Haply のInverse Serviceが正常に稼働していることを確認してください。
- シーンを起動する前に、Inverse3 とVerseGripデバイスが接続され、キャリブレーションが完了していることを確認してください。
このソフトウェアパッケージは、Inverse3 への対応を強化するため、現在も開発が続けられています。サポート、フィードバック、またはご要望がございましたら、弊社までご連絡ください。
インストール
「Inverse Unity」パッケージは、Unity のスコープレジストリから入手できます。このパッケージを統合するには:
-
「編集」>「プロジェクト設定」>「パッケージマネージャー」を開き、新しいスコープレジストリを追加して、次のように入力します:
- 名称:
Haply Robotics - URL
https://unitypackages.haply.co - スコープ(Scope(s)):
co.haply

- 名称:
-
「入る」 ウィンドウ > パッケージマネージャ,クリック 追加 ボタンをクリックし、次に選択します パッケージを名前で追加する。 入力
co.haply.inverse,その後、[クリック] 追加。
インストールが完了すると、パッケージマネージャーに Inverse パッケージが表示されます。
Haptic Rig の設定
Haptic Rig を作成するには、[GameObject] > [Haply Inverse] > [Haptic Rig (one hand)] の順に選択してください。 これにより、Inverse3 コントローラーとVerseGripを含む完全な環境が構築されます。
シーンには現在、以下のものが含まれるようになります:
- Haptic Device Mapper:Haply のInverse Serviceを使用して、デバイスの割り当てを管理します。
- Haptic Origin:シーン内で触覚設定のズームおよび位置調整を行います。
- ハプティックコントローラー: Inverse3 およびVerseGripデバイスのデータに基づき、カーソルの力や位置を制御します。
- Cursor:シーンのレンダリングに使用される「Inverse3 Cursor」および「VerseGrip Cursor」コンポーネントが含まれています。

パッケージコンポーネントに関する詳細については、グローバルアーキテクチャのドキュメントページをご覧ください。
「Play」モードでは、球体は Inverse3 カーソルと連動して移動・回転し、VerseGripの姿勢に追従します。


力制御モード
作成する ForceControl.cs C# スクリプトを作成し、それを ハプティック・オリジン GameObject 上で。
このスクリプトを使用すると、インスペクターのスライダーを使って、 Inverse3 装置が力を加える。
using Haply.Inverse;
using UnityEngine;
public class ForceControl : MonoBehaviour
{
[Range(-2, 2)]
public float forceX;
[Range(-2, 2)]
public float forceY;
[Range(-2, 2)]
public float forceZ;
private Inverse3 _inverse3;
private void Awake()
{
_inverse3 = GetComponentInChildren<Inverse3>();
}
protected void OnEnable()
{
_inverse3.DeviceStateChanged += OnDeviceStateChanged;
}
protected void OnDisable()
{
_inverse3.DeviceStateChanged -= OnDeviceStateChanged;
_inverse3.Release();
}
private void OnDeviceStateChanged(object sender, Inverse3EventArgs args)
{
var inverse3 = args.DeviceController;
inverse3.SetCursorLocalForce(new Vector3(forceX, forceY, forceZ));
}
}
脚本解説
-
forceX, Y, Z:スライダーで調整された力のベクトル成分は、CursorSetForce作業を行う前に、力が安全な範囲内に収まっていることを確認してください。 標準のものを代用することも可能です。Vector3フィールド。 -
Awake():現在の GameObject またはその子オブジェクトから取得する Inverse3 コンポーネント。 -
OnEnable():でAwakeメソッドの呼び出し後、およびスクリプトが起動するたびに、独立したスレッド内で触覚更新を登録するOnDeviceStateChangedコールバック。 -
OnDisable():このスクリプトが無効化された場合、またはアプリケーションが停止した場合は、ログアウトコールバックを実行し、力をリセットします。 -
OnDeviceStateChanged:表示パネルから取得するforceベクトル、そしてCursorSetForceそれを転送する方法は Inverse3。重要:このコールバックは、触覚スレッドによって 1kHz から 8kHz の範囲で高頻度で呼び出されます。 このコールバック内のすべてのコードが高度に最適化されていることを必ず確認してください。
使用方法
Play モードに入る前に、カーソルを確実に握っていることを確認してください。デバイスはForce Control状態に切り替わり、緑色のランプが点灯しているはずです。 その後、スライダーを使って出力力を調整し、デバイスの作業領域内で操作を行うことができます。
調整力により、Inverse3 が移動することがあります。作業スペースに障害物がないことを確認し、常にカーソルを握ったままにしてください。 安全に関するガイドラインについては、「安全な使用方法」の記事をご覧ください。

位置制御モード
同様に、デバイスの位置を制御するための PositionControl.cs C# スクリプトを作成し、それを ハプティック・オリジン GameObject 上で。
using Haply.Inverse;
using UnityEngine;
public class PositionControl : MonoBehaviour
{
[Range(-0.1f, 0.1f)]
public float positionX;
[Range(-0.1f, 0.1f)]
public float positionY;
[Range(-0.1f, 0.1f)]
public float positionZ;
private Inverse3 _inverse3;
private void Awake()
{
_inverse3 = GetComponentInChildren<Inverse3>();
}
protected void OnEnable()
{
_inverse3.DeviceStateChanged += OnDeviceStateChanged;
}
protected void OnDisable()
{
_inverse3.DeviceStateChanged -= OnDeviceStateChanged;
_inverse3.Release();
}
private void OnDeviceStateChanged(object sender, Inverse3EventArgs args)
{
var inverse3 = args.DeviceController;
inverse3.SetCursorLocalPosition(inverse3.WorkspaceCenterLocalPosition + new Vector3(positionX, positionY, positionZ));
}
}
ForceControl スクリプト、およびデバイスを制御するその他のスクリプトをすべて無効にしてください。
前の例と同様に:
- 実行モードでは、次のコマンドを使用します。
positionX, Y, and Zスライダーを使って調整し、 位置。選択された
Range(-0.1, 0.1)おおむね到達可能な最大位置に相当する。 Awake入手方法 Inverse3 コンポーネント。OnEnable方法はAwakeメソッドの呼び出し後、およびスクリプトが起動されるたびに、個別のスレッドで触覚の更新から登録を行うOnDeviceStateChangedコールバック。OnDisableスクリプトが無効化された場合やアプリケーションが停止した場合に、コールバックを解除し、力をリセットする方法。
ただし、両者には以下の違いがある:
OnDeviceStateChanged各触覚フレームの期間中、 ビューパネルから位置ベクトルを取得し、それをWorkspaceCenterLocalPosition加算し、 さらにCursorSetLocalPositionInverse3宛てに送信してください。
動作モードに入る前に、カーソルを中央付近に合わせるようにしてください。 デバイスは「位置制御」状態に切り替わります(インジケーターが青色に点灯します)。 その後、スライダーを使用して位置出力を調整し、デバイスの動作範囲を確認することができます。
位置を調整する際、「Inverse3 」が移動します。作業スペース内に貴重品がないことを確認し、常にカーソルを握ったままにしてください。 詳細については、「安全に使用するための記事」をご覧ください。
