クイックスタート逆ユニティパッケージ
このガイドでは、パッケージのインストール、Haptic Rigのセットアップ、力と位置の制御のための簡単なスクリプトの作成など、Haply Inverse Unityパッケージの基本的なセットアップの概要と基本的な使用方法を示す簡単な例を提供します。
包括的な詳細と高度なテクニックについては、チュートリアルをご覧ください。
バージョンサポート
- Unity 2021.3.x LTS:サポートされています。
- Unity 2022.3.x LTS:サポートされています。
- Unity 2023.x.x(テックストリーム):実験的
- Haply Inverse SDK:2.0.0以上
前提条件
- Haply Inverse SDKバージョン2.0.0以上をインストールしてください。
- Haply Inverse Serviceが動作可能であることを確認する。
- シーンを起動する前に、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(片手)に移動します。 このアクションは、Inverse3コントローラーとVerseGripを使った完全な環境を組み立てます。
これで、あなたのシーンが含まれることになる:
- ハプティック・デバイス・マッパー:Haply Inverse Serviceでデバイスの割り当てを管理します。
- ハプティック・オリジン(Haptic Origin):シーン内でハプティックの設定をスケーリングし、配置する。
- ハプティックコントローラー:Inverse3とVerseGripのデバイスデータに基づいて、カーソルの力や位置を管理します。
- カーソル:シーン表現用のInverse3Cursorと VerseGrip Cursorコンポーネントを含む。
パッケージ・コンポーネントの詳細については、グローバル・アーキテクチャのドキュメント・ページを参照のこと。
プレイモードでは、Inverse3カーソルとVerseGripの向きに同期して球体が移動・回転します。
フォース・コントロール・モード
を作成する。 ForceControl.cs
C#スクリプトを ハプティック・オリジン GameObject。
このスクリプトは インバース3 インスペクタのスライダーを使用します。
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()
:を取得します。 インバース3 コンポーネントを、現在のGameObjectまたはその子オブジェクトから取得する。 -
OnEnable()
:を登録する。OnDeviceStateChanged
の後、別のスレッドでハプティック・アップデートからのコールバックを返す。Awake
メソッド呼び出しと、スクリプトが有効になるたびに。 -
OnDisable()
:コールバックの登録を解除し、スクリプトが無効化されたときやアプリケーションが停止したときにフォースをリセットする。 -
OnDeviceStateChanged
:を取得します。force
ベクトルをインスペクター・ウィンドウから受け取り、それを インバース3 を使用している。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
メソッドは インバース3 コンポーネントを使用している。 - について
OnEnable
メソッドはOnDeviceStateChanged
の後、別のスレッドでハプティック・アップデートからのコールバックを返す。Awake
メソッド呼び出しと、スクリプトが有効になるたびに。 - について
OnDisable
メソッドはコールバックの登録を解除し、スクリプトが無効化されたときやアプリケーションが停止したときにフォースをリセットします。
しかし、違いはある:
- について
OnDeviceStateChanged
コールバックは最初にbasePosition
.そして、各ハプティックフレームの間に、インスペクタウィンドウから位置ベクトルを取り出し、それをbasePosition
を使ってInverse3に送る。CursorSetPosition
メソッドを使用する。
プレイモードに入る前に、カーソルをホールドする。デバイスは位置制御状態(青いライトで示される)に移行するはずです。 その後、スライダーでポジション出力を調整することで、デバイスのワークスペースを探索することができます。
ポジションを調整する際、Inverse3は移動します。作業スペースに貴重品がないことを確認し、必ずカーソルを固定してください。 詳しくは安全な使用方法をご覧ください。