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

Inverse Unity パッケージの最初のステップ

このガイドでは、基本的な設定について解説するとともに、簡単な例を用いて「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 「ein」を選択し、クリックしてください 追加.

    アップム-クイック追加

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

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

ハプティック・リグを作成するには、[GameObject] > [Haply Inverse] > [Haptic Rig (one hand)] の順に選択してください。 これにより、Inverse3 コントローラーとVerseGripを備えた完全な環境が構築されます。

そのシーンには、その後、以下の内容が含まれます:

  • Haptic Device Mapper:Haply のInverse Serviceを介してデバイスのマッピングを管理します。
  • ハプティック・オリジン:シーン内のハプティック設定をスケーリングおよび配置します。
  • ハプティックコントローラー: Inverse3およびVerseGripのデバイスデータに基づいて、カーソルの強度や位置を管理します。
  • カー ソル:シーンでの表示用に、Inverse3 カーソルおよびVerseGripカーソルのコンポーネントが含まれています。

ハプティック・リグ

このパッケージの構成要素に関する詳細については、「グローバルアーキテクチャ」のページをご覧ください。

プレイモードでは、ボールはVerseGripのカーソルと連動して移動・回転します。 Inverse3 およびVerseGripの向きに合わせて、同期して移動・回転します。

inverse3-検査官

ハンドル検査官

力制御モード​

C#スクリプトを作成する ForceControl.cs そして、それをGameObjectにアタッチしてください ハプティック・オリジン an. このスクリプトを使用すると、インスペクタのスライダーを介してデバイスに力を加えることができます 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 インスペクタウィンドウから取り出し、メソッドを使用して CursorSetForce an das Inverse3 続き。

    重要:コールバックは、1kHz~8kHzの範囲で高頻度でハプティックスレッドによってトリガーされます。 このコールバック内のコード全体を徹底的に最適化することが極めて重要です。

使用方法​

プレイモードに切り替える前に、カーソルを固定していることを確認してください。デバイスは「Force Control」モードに切り替わり、緑色のランプが点灯することでその状態がわかります。 その後、スライダーを使って出力力を調整することで、デバイスの動作範囲内を移動させることができます。

警告

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

カーソル・セット・フォース

位置制御モード​

同様に、C#スクリプトを作成してください PositionControl.cs デバイスの位置を制御し、GameObjectにアタッチしてください ハプティック・オリジン an.

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スクリプト、またはデバイスを制御するその他のスクリプトが無効になっていることを確認してください。

位置制御

前の例と同様に:

  • 「Verwenden Sie」を使用してください positionX, Y, and Z, ……を ポジション プレイモード中にスライダーを使って調整できます。

    選択された範囲 Range(-0.1, 0.1) これは、到達可能な最大位置にほぼ相当します。

  • その方法 Awake コンポーネントを呼び出します Inverse3 ab.
  • その方法 OnEnable コールバックを登録する OnDeviceStateChanged メソッドの呼び出し後、別のスレッドで行われるハプティック・アップデートから Awake そして、スクリプトが実行されるたびに。
  • その方法 OnDisable スクリプトが無効化されたり、アプリケーションが終了したりした際に、コールバックの登録を解除し、設定をリセットします。

ただし、違いもあります:

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

再生モードに切り替える前に、カーソルを中央付近に置いておいてください。 デバイスは位置制御モードに切り替わります(青いライトが点灯して表示されます)。 その後、スライダーを使って位置出力を調整し、デバイスの動作範囲を確認することができます。

警告

位置を調整する際、Inverse3 が動きます。作業エリアに貴重品がないことを確認し、常にカーソルをしっかりと握ってください。 詳細については、安全な使用方法に関する記事をご覧ください。

カーソル位置の設定