メインコンテンツへスキップ

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 のスコープレジストリから入手できます。このパッケージを統合するには:

  1. 「編集」>「プロジェクト設定」>「パッケージマネージャー」を開き、新しいスコープレジストリを追加して、次のように入力します:

    • 名称:Haply Robotics
    • URLhttps://unitypackages.haply.co
    • スコープ(Scope(s)):co.haply

    スコープレジストリ

  2. 「入る」 ウィンドウ > パッケージマネージャ,クリック 追加 ボタンをクリックし、次に選択します パッケージを名前で追加する。 入力 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の姿勢に追従します。

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():現在の 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 加算し、 さらに CursorSetLocalPosition Inverse3宛てに送信してください。

動作モードに入る前に、カーソルを中央付近に合わせるようにしてください。 デバイスは「位置制御」状態に切り替わります(インジケーターが青色に点灯します)。 その後、スライダーを使用して位置出力を調整し、デバイスの動作範囲を確認することができます。

注意

位置を調整する際、「Inverse3 」が移動します。作業スペース内に貴重品がないことを確認し、常にカーソルを握ったままにしてください。 詳細については、「安全に使用するための記事」をご覧ください。

カーソル位置設定