クイックスタートHardwareAPI Unityパッケージ
この記事では、基本的なセットアップ手順と、基本的な使い方を示す簡単な例を示します。詳細と 詳細と高度な使用法については Unityパッケージリファレンスまたは チュートリアルを参照してください。
バージョンサポート
- Unity 2020.3.x LTS:推奨
- Unity 2021.3.x LTS:サポートされています。
- Unity 2022.x(テックストリーム):実験的
パッケージ概要
Haply HardwareAPIUnityパッケージは、HaplyのC# HardwareAPIクラスライブラリの上に構築されています。 ライブラリの上に構築され、Unityワークフローに合わせた追加統合とQoL機能を提供します。 ワークフローに特化した統合とクオリティライフ機能を提供します。
Haptic ThreadコンポーネントとHandle Threadコンポーネントは、スレッドセーフな非同期通信ループでそれぞれのデバイスとの通信を処理します。 デバイスとの通信をスレッドセーフな非同期通信ループで処理します。さらに、Haptic Threadは Inverse3を制御するためのいくつかのメソッドを提供します。また、このパッケージは Unityの座標系とInverse3の座標系を自動的に変換します。
注意このパッケージは、Inverse3の開発をさらに簡素化するために継続的に開発中です。 ご不明な点やご要望がございましたら、お気軽にお問い合わせください。
Haply Hardware API パッケージをインストールする
HardwareAPI Unityパッケージは スコープド・レジストリ 機能を介して配布されます。このセクションでは、カスタムレジストリ レジストリを定義し、新しいプロジェクトに HardwareAPI パッケージを追加するために必要な手順を説明します。
-
プロジェクトを開いた状態で、UnityのツールバーのEdit > Project Settings > Package Managerに移動します。 ツールバーの Edit > Project Settings > Package Manager に移動し、Package ManagerウィンドウのScoped Registryセクションでプラスボタン ボタンを押し、以下を追加します:
- 名前
Haply Robotics
- URL:
https://unitypackages.haply.co
- スコープ(複数可):
co.haply
別の方法として プロジェクトマニフェストファイルを直接編集することもできます。
Unity Scoped Registry の詳細については、以下を参照してください: docs.unity3d.com - 名前
-
Unityのツールバーを使って「ウィンドウ」>「パッケージマネージャ」に移動します。
-
ステータスバーの追加+ボタンをクリックし、パッケージ名で追加を選択します。
-
入る
co.haply.hardwareapi
として 名称 をクリックしてください。 追加.
成功すれば、パッケージ・マネージャーは以下の情報を表示するはずだ。
スタート
インバース3の制御
-
sceneの下に空のGame Objectを作成し、Haptic Threadという名前を付け、インスペクタからHaptic Threadコンポーネントを追加します。 Threadコンポーネントを追加します。
-
Haptic ThreadでDevice Addressのドロップダウンを使い、プレートの名前と一致するInverse3デバイスを選択します。 を選択します。
-
シーンに球体を追加し、Cursorと名付け、EE Avatarに取り付けます。 にアタッチします。これでPlay Modeに入ると、Inverse3のカーソルと一緒に球体が移動します。 インスペクタウィンドウで位置と速度が連続的に更新されます。
-
以下のコードで新しいC#スクリプトを作成し、それを以下のコードと同じGame Objectにアタッチする。 Haptic Threadと同じGame Objectにアタッチする:
using Haply.HardwareAPI.Unity;
using UnityEngine;
public class HapticController : MonoBehaviour
{
[Range(-2, 2)]
public float forceX;
[Range(-2, 2)]
public float forceY;
[Range(-2, 2)]
public float forceZ;
private void Awake()
{
var hapticThread = GetComponent<HapticThread>();
hapticThread.onInitialized.AddListener(() => hapticThread.Run(ForceCalculation));
}
private Vector3 ForceCalculation(in Vector3 position)
{
return new Vector3(forceX, forceY, forceZ);
}
}- について
Awake
メソッドは ハプティック・スレッド を実行し、別のスレッドで触覚の計算を開始する。 スレッドで開始する。そしてonInitialized
イベントを呼び出します。 Runメソッドを呼び出しForceCalculation
メソッドをデリゲートの引数として指定する。 ForceCalculation
は、インスペクタウィンドウで指定された力ベクトルを受け取り、それを Inverse3。
- について
-
プレイモードに入ると、Haptic Threadはインスペクタウィンドウのデバイスの速度と位置を連続的に更新します。 位置がインスペクタウィンドウで更新されます。デバイスのワークスペースを探索し、スライダを使って力の出力を制御してみてください。 出力をスライダを使って制御してみてください。
警告:力を変更するとInverse3が動くので、必ずワークスペースから貴重品を取り除き、カーソルをホールドしてください。 カーソルを固定してください。詳しくは安全な使用方法をご覧ください。
HapticThreadコンポーネントは、スライダーを使用して触覚スレッドのリフレッシュレートを制御することができます。最良の結果を得るには 1KHz以上のリフレッシュレートを使用してください。
HapticThreadが提供する位置は、デバイス上の位置センサーを使って直接測定される。 で直接測定される。一方、速度は速度推定アルゴリズムを使って計算され、フィルタリングする必要のない信号を提供します。 フィルタリングする必要のない信号を提供します。また、HapticThreadは、デバイスの電源状態や、デバイスの動作状態に関する情報も提供することができます。 HapticThreadはまた、デバイスの電源状態、ベースの向き、その他の状態に関する情報を提供することができます。
ハンドルの使用
-
sceneの下に空のGame Objectを作成し、Handle Threadという名前を付け、インスペクタからHandle Threadコンポーネントを追加する。
-
インスペクタで、Device Addressドロップダウンを使用して、Handle デバイスを選択します。 タグの
-
以下の Transform 値を持つキューブをカーソルの子として追加します:
- ポジション:
0, 0, -1
- ローテーション:
0, 0, 0
- 規模:
0.5, 0.5, 2
- ポジション:
-
カーソルをハンドル・スレッドの アバター・プロパティにアタッチする
-
プレイモードに入ると、ハンドル・スレッドはインスペクタ・ウィンドウのデバイスの向きを連続的に更新します。 ハンドルを動かすとカーソルが回転します。
そうすることで、カーソルの回転はハンドルの向きで更新され、位置は エフェクタの動きによって更新されます。