メインコンテンツへ移動

Inverse Unity Package の入門

このガイドでは、Haply Inverse Unity Packageの基本設定について解説し、パッケージのインストール、ハプティックリグのセットアップ、および力と位置を制御する簡単なスクリプトの作成など、同パッケージの基本的な使用方法を示す簡単な例を紹介します。

詳細や高度なテクニックについては、チュートリアルをご覧ください。

バージョンの互換性​

  • Unity 2021.3.x LTS:対応状況
  • Unity 2022.1.x LTS:対応状況
  • Unity 6000.x LTS:対応状況
  • Haply Inverse SDK : 3.1.0 以降

前提条件​

  • バージョン 3.1.0 以降の Haply Inverse SDKバージョン3.1.0以降をインストールしてください。
  • 「Haply Inverse Service」が正常に動作していることを確認してください。
  • シーンを開始する前に、Inverse3 およびVerseGripが接続され、キャリブレーションが完了していることを確認してください。
備考

このパッケージは、Inverse3 のサポートを向上させるため、継続的に開発が進められています。ご不明な点、ご意見、ご要望がございましたら、お問い合わせください。

インストール​

「Inverse Unity」パッケージは、UnityのScoped Registryから入手可能です。このパッケージを統合するには:

  1. 「編集」>「プロジェクト設定」>「パッケージマネージャー」を開きます。以下の内容で新しいスコープ付きレジストリを追加します:

    • 名前: Haply Robotics
    • URL: https://unitypackages.haply.co
    • 適用範囲: co.haply

    区切り文字付きレコード

  2. アクセスするには ウィンドウ > パッケージマネージャ、ボタンをクリックしてください 追加, その後、[選択] をクリックします パッケージを名前で追加する. 入力してください co.haply.inverse そして、[クリック]してください 追加.

    UPMインターフェースでのクイック追加

インストールが正常に完了すると、パッケージマネージャーに「Inverse」パッケージが表示されます。

ハプティック・リグのセットアップ​

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コンポーネントが含まれています。

ハプティック・リグ

パッケージに含まれるコンポーネントの詳細については、全体アーキテクチャに関するドキュメントページをご覧ください。

「再生」モードでは、球体はカーソルと連動して移動・回転し Inverse3 およびVerseGripの向きに合わせて、球体が移動・回転します。

検査官Inverse3

ハンドル検査員

力の制御方式​

スクリプトを作成する 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() : コンポーネントを取得する Inverse3 現在のGameObjectまたはその子オブジェクトのいずれかから。

  • OnEnable() : コールバック関数を登録する OnDeviceStateChanged メソッドの呼び出し後、ハプティック更新に起因する問題で、別の実行スレッド内で発生する Awake そして、スクリプトが実行されるたびに。

  • OnDisable() : スクリプトが無効化されたり、アプリケーションが終了したりした際に、コールバック関数を解除し、力をリセットします。

  • OnDeviceStateChanged : ベクトルを取得する force 「インスペクタ」ウィンドウから取得し、それを Inverse3 その方法を用いて CursorSetForce.

    重要:コールバック関数は、1kHz~8kHzの高周波数で動作するハプティックスレッドによって呼び出されます。 このコールバック関数のコード全体が高度に最適化されていることを確認することが不可欠です。

利用状況​

再生モードに入る前に、カーソルをしっかり押さえておいてください。すると、デバイスは「Force Control」状態になり、緑色のインジケーターが点灯します。 その後、スライダーを使って出力強度を調整し、デバイスの動作範囲を確認することができます。

ご注意

力の調整を行うと、Inverse3 が動きます。作業スペースに障害物がないことを確認し、常にカーソルをしっかり握ってください。 安全に関する注意事項については、「安全な使用方法」の記事をご覧ください。

définir-force-curseur

位置制御方式​

同様に、スクリプトを作成してください 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スクリプトおよびデバイスを制御するその他のスクリプトがすべて無効になっていることを確認してください。

位置制御

前の例と同様に:

  • 「Utilisez」を使用してください positionX, Y, and Z を調整するには 位置 再生モード中にスライダーを使って。

    選択されたビーチ Range(-0.1, 0.1) ほぼ到達可能な最大位置に相当する。

  • その方法 Awake コンポーネントを取得する Inverse3.
  • その方法 OnEnable リコール機能を登録する OnDeviceStateChanged メソッドの呼び出し後、ハプティック更新に起因する問題で、別の実行スレッド内で発生する Awake そして、スクリプトが実行されるたびに。
  • その方法 OnDisable スクリプトが無効化されたり、アプリケーションが終了したりした際に、コールバック関数を登録解除し、力をリセットします。

しかし、いくつかの違いがあります:

  • リコール機能 OnDeviceStateChanged, 各ハプティックフレームごとに、 インスペクタウィンドウの位置ベクトルを取得し、それを WorkspaceCenterLocalPosition, そして、メソッドを使用してInverse3 に送信します。 CursorSetLocalPosition.

再生モードに入る前に、カーソルを中央付近に合わせてください。 すると、本機は「位置制御」モード(青いインジケーターで表示)に切り替わります。 その後、スライダーを使って出力位置を調整し、本機の作業領域を確認することができます。

ご注意

位置調整を行うと、Inverse3 が動き出します。作業スペースに障害物や貴重品がないことを確認し、常にカーソルを押さえておいてください。 詳細については、「安全な使用方法」の記事をご覧ください。

カーソル位置の設定