メインコンテンツまでスキップ
このページは自動翻訳されており、誤りが含まれる場合があります。 英語の原文を表示

Unity 向け Physics Glove ガイド

bHaptics Physics Glove SDK を使用すると、指先と手首の振動を通じて TactGlove ユーザーに没入感のある VR 体験を提供できます。


これは何のためのものか

仮想の手が仮想環境と物理的に衝突し、仮想オブジェクトと相互作用できるようにするために、仮想の手に物理を適用できます

手に物理を適用する際には、一般的に マスター・スレーブ構造 が使用されます。これを実装するために、HPTK、Ultraleap Physics Hand、Auto Hand などのプラグインを使用できます。あるいは、独自に実装することもできます。

bHaptics Physics Glove SDK は、マスター・スレーブ物理を使用する仮想の手にハプティックを適用できます。ハプティックグローブに適切な振動を提供し、ユーザーが実際に仮想オブジェクトを掴んでいるかのように感じさせます。

注記

TactGlove を 単に振動させるだけ であれば、Physics Glove SDK を使用する必要はありません。前の Unity ガイド まで進めていれば、TactGlove をそのまま使用できます。

このドキュメントの説明は、仮想の手が物理的な動作を行う際に、より良いハプティックを適用するのに役立つ機能を提供します。

事前準備

仕様

  • Unity: 2022+
  • マスター・スレーブ構造で物理が実装された手
  • bHaptics Plugin: 2.3.0+
    • 基本の bHaptics SDKbHaptics Physics Glove SDK がすでに含まれています。

始める前に

注記

Unity ガイド に従って Unity プロジェクトの設定を完了していることを前提とします。

Unity プロジェクトで次の要件が満たされていることを確認してください。

  • API Key と App ID を使用して ハプティックアプリケーションがプロジェクトに連携 されています。
  • シーンに "[bhaptics]" プレハブが存在します。

プレハブの追加

  1. Project Window で "Assets" → "Bhaptics" → "SDK2" → "Prefabs" に移動します。
  2. "[bHapticsGlove]" プレハブをシーンに追加します。
  3. ヒエラルキーで追加した "[bHapticsGlove]" を選択すると、インスペクターで Bhaptics Physics Glove コンポーネントを確認できます。 Untitled
  4. "Create New GloveHapticSettings" ボタンを選択します。すると、グローブのハプティック設定が表示されます。 Untitled

デフォルトで設定されたこれらの値は、一般的な環境で理想的に動作します。ただし、良い感触を得るために、プロジェクト環境によってはパラメータ値を調整する必要がある場合があります。

パラメータの詳細な説明は、Reference の BhapticsPhysicsGloveSettings ページ で確認できます。

Physics Hand に bHaptics を適用する

手の物理がどのように実装されているかによって、イベントを登録する方法が異なる場合があります。

ただし、共通の原則は 指先が衝突を検知すると、指先のモーターが適切な量のハプティックを提供する ということです。

指先に位置する Collider(または Rigidbody)を持つ GameObject を見つけ、その後、以下の内容を実装したコンポーネントを付与してください。Collision イベントが呼び出され、以下の関数が実行されると、グローブがハプティックを提供します。

Unity の Collision イベントに関する詳細は、Unity のマニュアル を参考にしてください。

使用しているプラグインによっては、衝突イベントの発生時に呼び出されるイベントがある場合があります。同様に、ハプティックを適用する関数を呼び出すことで処理できます。以下を参考にしてください。

注記

グローブのモーターマッピングは次のとおりです。 モーターインデックス

SendEnterHaptic

このコードは OnCollisionEnter で使用されることを想定して作成した関数です。

private int fingerIndex;
private bool isLeft;

private void OnCollisionEnter(Collision collision)
{
// We typically use collision.relativeVelocity, but depending on how your hand physics are designed, you can use other overload functions.
BhapticsPhysicsGlove.Instance.SendEnterHaptic(isLeft ? PositionType.GloveL : PositionType.GloveR, fingerIndex, collision.relativeVelocity);
}

SendStayHaptic

このコードは OnCollisionStay で使用されることを想定して作成した関数です。

private int fingerIndex;
private bool isLeft;

private void OnCollisionStay(Collision collision)
{
BhapticsPhysicsGlove.Instance.SendStayHaptic(isLeft ? PositionType.GloveL : PositionType.GloveR, fingerIndex, slaveTransform, masterTransform);
}

SendExitHaptic

このコードは OnCollisionExit で使用されることを想定して作成した関数です。

private int fingerIndex;
private bool isLeft;

private void OnCollisionExit(Collision collision)
{
BhapticsPhysicsGlove.Instance.SendExitHaptic(isLeft ? PositionType.GloveL : PositionType.GloveR, fingerIndex);
}

3つのイベントを登録してテストしてみてください。指先が接触するとイベントが発生します。

これらのハプティック関数に関する詳細は、BhapticsPhysicsGlove クラスのリファレンス を参考にしてください。