クイックスタート逆ユニティパッケージ
このガイドでは、基本的なセットアップの概要と、Haply Inverse Unity Package の基本的な使い方を示す簡単な例を示します。この例には、パッケージのインストール、Haptic Rig のセットアップ、力と位置の制御のための簡単なスクリプトの作成などが含まれます。
包括的な詳細と高度なテクニックについては、チュートリアルをご覧ください。
バージョンサポート
- Unity 2021.3.x LTS:サポートされています。
- Unity 2022.3.x LTS:サポートされています。
- Unity 2023.x.x(テックストリーム):実験的
- Haply Inverse SDK2.0.0 以上
前提条件
- インストール Haply Inverse SDKバージョン2.0.0以上をインストールしてください。
- Haply インバース・サービスが動作可能であることを確認する。
- シーンを起動する前に、Inverse3 と VerseGrip デバイスが接続され、較正されていることを確認してください。
本パッケージは、Inverse3 のサポートを強化するため、継続的に開発中です。サポート、フィードバック、リクエストについては、こちらまでご連絡ください。
インストール
Inverse UnityパッケージはUnityのScoped Registryから入手できます。パッケージを統合するには
- 
Edit > Project Settings > Package Managerを開く。で新しいScoped Registryを追加します: - 名前 Haply Robotics
- URL: https://unitypackages.haply.co
- スコープ(複数可): co.haply
  
- 名前 
- 
アクセス ウィンドウ > パッケージマネージャをクリックしてください。 追加 ボタンを押して パッケージを名前で追加する. 入る co.haply.inverseをクリックしてください。 追加.
インストールに成功すると、パッケージ・マネージャーにInverseパッケージが表示されます。
ハプティック・リグのセットアップ
Haptic Rig を作成するには、GameObject >Haply Inverse > Haptic Rig (one hand) に移動します。 このアクションでは、Inverse3 コントローラと VerseGrip を使って完全な環境を構築します。
これで、あなたのシーンが含まれることになる:
- ハプティック・デバイス・マッパー:Haply Inverse Serviceでデバイスの割り当てを管理します。
- ハプティック・オリジン(Haptic Origin):シーン内でハプティックの設定をスケーリングし、配置する。
- ハプティックコントローラー:カーソルの力や位置を Inverse3およびVerseGripデバイスのデータに基づいてカーソルの力や位置を管理します。
- カーソル:シーン表現用のInverse3Cursorと VerseGrip Cursorコンポーネントを含む。

パッケージ・コンポーネントの詳細については、グローバル・アーキテクチャのドキュメント・ページを参照のこと。
プレイ・モードでは、カーソルとVerseGripの向きに同期して球体が移動・回転します。 Inverse3カーソルとVerseGripの向きに同期して移動・回転します。


フォース・コントロール・モード
を作成する。 ForceControl.cs C#スクリプトを ハプティック・オリジン GameObject。
このスクリプトは Inverse3 インスペクタのスライダーを使用します。
using Haply.Inverse.Unity;
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(Inverse3 inverse3)
    {
        inverse3.CursorSetForce(forceX, forceY, forceZ);
    }
}
スクリプトの説明
- 
forceX, Y, Z:スライダーを使用して力のベクトル成分を調整可能。CursorSetForceメソッドを使用する。 あるいは、標準的なVector3フィールドを使うことができる。
- 
Awake():を取得します。 Inverse3 コンポーネントを、現在のGameObjectまたはその子オブジェクトから取得する。
- 
OnEnable():を登録する。OnDeviceStateChangedの後、別のスレッドでハプティック・アップデートからのコールバックを返す。Awakeメソッド呼び出しと、スクリプトが有効になるたびに。
- 
OnDisable():コールバックの登録を解除し、スクリプトが無効化されたときやアプリケーションが停止したときにフォースをリセットする。
- 
OnDeviceStateChanged:を取得します。forceベクトルをインスペクター・ウィンドウから受け取り、それを Inverse3 を使用している。CursorSetForceメソッドを使用する。重要:このコールバックは、4kHzから8kHzの高い周波数でハプティックスレッドによってトリガーされます。 このコールバック内のすべてのコードが高度に最適化されていることを確認することが重要です。 
使用方法
プレイモードに入る前に、カーソルを保持していることを確認してください。デバイスはフォースコントロールの状態に移行し、緑色のライトが点灯します。 その後、スライダーを使ってフォース出力を調整することで、デバイスのワークスペースをナビゲートすることができます。
力を調整すると、Inverse3 。作業スペースを確保し、常にカーソルを固定してください。 安全に関するガイドラインは、安全な使用に関する記事を参照してください。

ポジション・コントロール・モード
同様に PositionControl.cs デバイスの位置をコントロールするC#スクリプトを ハプティック・オリジン ゲームオブジェクト。
using Haply.Inverse.Unity;
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 Vector3 _basePosition;
   
   private void Awake()
   {
     _inverse3 = GetComponentInChildren<Inverse3>();
   }
   
   protected void OnEnable()
   {
     _inverse3.DeviceStateChanged += OnDeviceStateChanged;
   }
   
   protected void OnDisable()
   {
     _inverse3.DeviceStateChanged -= OnDeviceStateChanged;
     _inverse3.Release();
   }
   
   private void OnDeviceStateChanged(Inverse3 inverse3)
   {
     if (_basePosition == Vector3.zero)
     {
         _basePosition = inverse3.CursorLocalPosition;
     }
     inverse3.CursorSetPosition(_basePosition + new Vector3(positionX, positionY, positionZ));
   }
}
ForceControlスクリプトまたはデバイスを制御するその他のスクリプトが無効になっていることを確認します。
前の例と似ている:
- 活用する positionX, Y, and Zを調整する。 位置 プレイモード中にスライダーを使用する。選択された Range(-0.1, 0.1)は、達成可能な最大位置にほぼ一致する。
- について Awakeメソッドは Inverse3 コンポーネントを使用している。
- について OnEnableメソッドはOnDeviceStateChangedの後、別のスレッドでハプティック・アップデートからのコールバックを返す。Awakeメソッド呼び出しと、スクリプトが有効になるたびに。
- について OnDisableメソッドはコールバックの登録を解除し、スクリプトが無効化されたときやアプリケーションが停止したときにフォースをリセットします。
しかし、違いはある:
- について OnDeviceStateChangedコールバックは最初にbasePosition.そして、各ハプティックフレームの間に、インスペクタウィンドウから位置ベクトルを取り出し、それをbasePositionを使い、Inverse3 。CursorSetPositionメソッドを使用する。
プレイモードに入る前に、カーソルをホールドする。デバイスは位置制御状態(青いライトで示される)に移行するはずです。 その後、スライダーでポジション出力を調整することで、デバイスのワークスペースを探索することができます。
位置を調整すると、Inverse3 が移動します。作業スペースに貴重品がないことを確認し、常にカーソルを固定してください。 詳細については、安全な使用に関する記事を参照してください。
