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

Class BhapticsLibrary

BhapticsLibrary クラスは bHaptics のハプティックデバイスを使用するための関数を含んでいます。

リファレンス​

  • パス: Assets\Bhaptics\SDK2\Scripts\Core\Plugins\BhapticsLibrary.cs

静的関数 — イベント駆動ハプティックの再生​

Designer/Portal で作成した特定のハプティックイベントにバインドされたハプティックパターンを再生します。これらの関数の使用を強く推奨します。

Play​

public static int Play(string eventId, int startMillis = 0, float intensity = 1f, float duration = 1.0f, float angleX = 0.0f, float offsetY = 0.0f, int requestId = -1);

ハプティックの強さ、Duration、方向を調整しながらハプティックイベントを再生します。

Parameters​

  • string eventId: 再生したいハプティックイベントの名前です。
  • int startMillis: イベント再生を開始する位置(ms)です。先頭の startMillis ms はスキップされます(再生前の遅延ではなく、開始 Offset です)。デフォルトは 0 です。Windows/macOS/Android のみ対応します。
  • float intensity: ハプティック Intensity にこの値が掛けられます。
  • float duration: ハプティック Duration にこの値が掛けられます。
  • float angleX: グローバルな Vector3.up を中心にハプティックを反時計回りに回転します。有効範囲: [0.0f - 360.0f]
  • float offsetY: ハプティックを上または下に移動します。有効範囲: [-0.5f - 0.5f]
  • int requestId: ランダムな ID の代わりに使用する Request ID を指定します。有効な値は 0 以上です。省略した場合、または負の値を指定した場合は、ランダムな ID が割り当てられます。
    Request ID の再利用

    通常、別のハプティックの再生中にハプティックを再生すると、新しい再生は現在の再生に重なって実行されます。ただし、現在のハプティックと同じ eventId と requestId で再生すると、現在の再生が停止し、新しい再生が開始されます。これにより、短い間隔で繰り返し再生したときに各ハプティックがより明確に感じられ、ハプティックが積み重なるのを防げます。

    eventId と requestId ごとの再生タイムライン

Returns​

リクエスト ID です。リクエスト ID を使用してハプティックを停止できます。失敗した場合は -1 を返します。

ただし Hub に接続されている場合、Hub は戻り値を提供しないため、失敗した呼び出しが -1 を返しません。

Example​

using Bhaptics.SDK2;

public class Example : MonoBehaviour
{
private void OnShoot()
{
// Assume the event name is "shootpistol"

// BASIC USAGE
BhapticsLibrary.Play(BhapticsEvent.SHOOTPISTOL);
// or
BhapticsLibrary.Play("shootpistol");

// ADVANCED USAGE
BhapticsLibrary.Play(
BhapticsEvent.SHOOTPISTOL, // Haptic name
0, // Playback start position (millisecond)
1.0f, // Haptic intensity
1.0f, // Haptic duration
20.0f, // Rotate haptic around global Vector3.up (0f - 360f)
0.3f // Move haptic up or down (-0.5f - 0.5f)
);

// CUSTOM REQUEST ID
BhapticsLibrary.Play(BhapticsEvent.SHOOTPISTOL, requestId: 1001);
}
}

PlayParam​

public static int PlayParam(string eventId, float intensity = 1.0f, float duration = 1.0f, float angleX = 0.0f, float offsetY = 0.0f, int requestId = -1);

ハプティックの強さ、Duration、方向を調整しながらハプティックイベントを再生します。

Parameters​

  • string eventId: 再生したいハプティックイベントの名前です。
  • float intensity: ハプティック Intensity にこの値が掛けられます。
  • float duration: ハプティック Duration にこの値が掛けられます。
  • float angleX: グローバルな Vector3.up を中心にハプティックを反時計回りに回転します。有効範囲: [0.0f - 360.0f]
  • float offsetY: ハプティックを上または下に移動します。有効範囲: [-0.5f - 0.5f]
  • int requestId: ランダムな ID の代わりに使用する Request ID を指定します。有効な値は 0 以上です。省略した場合、または負の値を指定した場合は、ランダムな ID が割り当てられます。
    Request ID の再利用

    通常、別のハプティックの再生中にハプティックを再生すると、新しい再生は現在の再生に重なって実行されます。ただし、現在のハプティックと同じ eventId と requestId で再生すると、現在の再生が停止し、新しい再生が開始されます。これにより、短い間隔で繰り返し再生したときに各ハプティックがより明確に感じられ、ハプティックが積み重なるのを防げます。

    eventId と requestId ごとの再生タイムライン

Returns​

リクエスト ID です。リクエスト ID を使用してハプティックを停止できます。失敗した場合は -1 を返します。

ただし Hub に接続されている場合、Hub は戻り値を提供しないため、失敗した呼び出しが -1 を返しません。

Example​

using Bhaptics.SDK2;

public class Example : MonoBehaviour
{
private void OnShoot()
{
BhapticsLibrary.PlayParam(
BhapticsEvent.SHOOTPISTOL, // Haptic name
1.0f, // Haptic intensity
1.0f, // Haptic duration
20.0f, // Rotate haptic around global Vector3.up (0f - 360f)
0.3f // Move haptic up or down (-0.5f - 0.5f)
);
}
}

PlayAngle​

public static int PlayAngle(string eventId, float angleX, float offsetY);

ハプティックの方向を調整しながらハプティックイベントを再生します。intensity と duration を 1.0f に固定した PlayParam の便利なラッパーです。

Parameters​

  • string eventId: 再生したいハプティックイベントの名前です。
  • float angleX: グローバルな Vector3.up を中心にハプティックを反時計回りに回転します。有効範囲: [0.0f - 360.0f]
  • float offsetY: ハプティックを上または下に移動します。有効範囲: [-0.5f - 0.5f]

Returns​

リクエスト ID です。リクエスト ID を使用してハプティックを停止できます。失敗した場合は -1 を返します。

ただし Hub に接続されている場合、Hub は戻り値を提供しないため、失敗した呼び出しが -1 を返しません。

PlayLoop​

public static int PlayLoop(
string eventId,
float intensity = 1.0f,
float duration = 1.0f,
float angleX = 0.0f,
float offsetY = 0.0f,
int interval = 200,
int maxCount = 999999
);

ハプティックを繰り返し再生します。さらに、PlayHapticWithOption 関数のように、ハプティックの強さ、Duration、方向を調整できます。

Parameters​

  • string eventId: 再生したいハプティックイベントの名前です。
  • float intensity: ハプティック Intensity にこの値が掛けられます。
  • float duration: ハプティック Duration にこの値が掛けられます。
  • float angleX: グローバルな Vector3.up を中心にハプティックを反時計回りに回転します。有効範囲: [0.0f - 360.0f]
  • float offsetY: ハプティックを上または下に移動します。有効範囲: [-0.5f - 0.5f]
  • int interval: ループ間の時間間隔(ミリ秒)です。
  • int maxCount: ループ回数です。

Returns​

リクエスト ID です。リクエスト ID を使用してハプティックを停止できます。失敗した場合は -1 を返します。

ただし Hub に接続されている場合、Hub は戻り値を提供しないため、失敗した呼び出しが -1 を返しません。

Example​

using Bhaptics.SDK2;

public class Example : MonoBehaviour
{
private void OnShoot()
{
BhapticsLibrary.PlayLoop(
BhapticsEvent.SHOOTPISTOL, // Haptic name
1.0f, // Haptic intensity
1.0f, // Haptic duration
20.0f, // Rotate haptic around global Vector3.up (0f - 360f)
0.3f, // Move haptic up or down (-0.5f - 0.5f)
200, // Loop interval time (millisecond)
999999 // Loop count
);
}
}

PlayLoopOnly​

public static int PlayLoopOnly(string eventId, int interval = 200, int maxCount = 999999);

ハプティックを繰り返し再生します。intensity と duration を 1.0f に固定し、方向の調整を行わない PlayLoop の便利なラッパーです。

Parameters​

  • string eventId: 再生したいハプティックイベントの名前です。
  • int interval: ループ間の時間間隔(ミリ秒)です。
  • int maxCount: ループ回数です。

Returns​

リクエスト ID です。リクエスト ID を使用してハプティックを停止できます。失敗した場合は -1 を返します。

ただし Hub に接続されている場合、Hub は戻り値を提供しないため、失敗した呼び出しが -1 を返しません。

静的関数 — ハプティックの直接再生​

新しいイベントを作成せずにハプティックを再生したい場合は、これらの関数を使用してください。

PlayMotors​

public static int PlayMotors(int position, int[] motors, int durationMillis);

特定のハプティックアクチュエータでハプティックフィードバックを再生します。イベントを作成せずにこの関数を使用できます。

Parameters​

  • int position: ハプティックデバイスの種類です。詳細はこちらを参照してください。
    値デバイス同じ値...モーター数
    0TactSuit ProPositionType.Vest32
    1TactSleeve(Left)PositionType.ForearmL3
    2TactSleeve(Right)PositionType.ForearmR3
    3TactVisorPositionType.Head4
    4Tactosy for Hands(Left)PositionType.HandL3
    5Tactosy for Hands(Right)PositionType.HandR3
    6Tactosy for Feet(Left)PositionType.FootL3
    7Tactosy for Feet(Right)PositionType.FootR3
    8TactGlove(Left)PositionType.GloveL8
    9TactGlove(Right)PositionType.GloveR8
  • int[] motors: デバイスのモーター数に合わせて配列の長さを指定します。配列の値はモーターの Intensity を意味します。配列内の各値の有効範囲: [0 - 100]
  • int durationMillis: ハプティックの Duration(ミリ秒単位)です。100 以上を推奨します。

Returns​

リクエスト ID です。リクエスト ID を使用してハプティックを停止できます。失敗した場合は -1 を返します。

ただし Hub に接続されている場合、Hub は戻り値を提供しないため、失敗した呼び出しが -1 を返しません。

Example​

using Bhaptics.SDK2;

public class Example : MonoBehaviour
{
private void OnCall()
{
// TactSuit Pro has 32 motors, so length of array should be 32 too.
int[] MotorValueArray = new int[] {
50, 40, 30, 20, 10, 50, 40, 30,
50, 40, 30, 20, 10, 50, 40, 30,
50, 40, 30, 20, 10, 50, 40, 30,
50, 40, 30, 20, 10, 50, 40, 30,
};

BhapticsLibrary.PlayMotors(
(int)PositionType.Vest, // Device type
MotorValueArray, // Haptic intensities
500 // Haptic duration (millisecond)
);
}
}

PlayWaveform​

public static int PlayWaveform(
PositionType positionType,
int[] motorValues,
GlovePlayTime[] playTimeValues,
GloveShapeValue[] shapeValues,
int frequency = 80,
int repeatCount = 0
);

TactGlove 専用。 TactGlove でハプティックを再生します。PlayMotors を使用する場合と異なり、ハプティック Duration と振動 Intensity の変化を細かく調整できます。これにより、ハプティックフィードバックをより繊細に表現できます。

各配列(motorValues、playTimeValues、shapeValues)は、TactGlove DK2 の場合は 6 個、TactGlove DK3 の場合は 8 個の要素を持つ必要があり、3 つの配列の長さはすべて同じでなければなりません。それ以外の長さの場合は -1 を返します。

Parameters​

  • PositionType positionType: ハプティックデバイスの種類です。

    値デバイス同じ値…
    PositionType.GloveLTactGlove(Left)8
    PositionType.GloveRTactGlove(Right)9
  • int[] motorValues: 各モーターの Intensity を表す配列です。その長さは TactGlove のモーター数と一致する必要があります。すなわち 6 個(TactGlove DK2)または 8 個(TactGlove DK3)です。配列インデックス 6 と 7(下表参照)の手のひらモーターは DK3 にのみ存在します。配列内の各値の有効範囲: [0 - 100]

    配列インデックスモーターの位置
    0親指の先
    1人差し指の先
    2中指の先
    3薬指の先
    4小指の先
    5手首
    6手のひら(親指側)
    7手のひら(小指側)
  • GlovePlayTime[] playTimeValues: motorValues と同じ長さ(DK2 は 6 個、DK3 は 8 個)の配列で、各要素は作動の時間間隔を表し、時間は GlovePlayTime 列挙型で定義します。

    値Duration同じ値…
    GlovePlayTime.Noneなし0
    GlovePlayTime.FiveMS5ms1
    GlovePlayTime.TenMS10ms2
    GlovePlayTime.TwentyMS20ms4
    GlovePlayTime.ThirtyMS30ms6
    GlovePlayTime.FortyMS40ms8
  • GloveShapeValue[] shapeValues: motorValues と同じ長さ(DK2 は 6 個、DK3 は 8 個)の配列で、各要素は時間に応じたハプティック Intensity の変化の形を表し、GloveShapeValue 列挙型で指定します。

    値ウェイブフォーム同じ値…
    GloveShapeValue.ConstantDuration の間、一定の Intensity0
    GloveShapeValue.Decreasing指定した Intensity で始まり、半分まで減少1
    GloveShapeValue.Increasing指定した Intensity の半分で始まり、指定した Intensity まで増加します。2

    [TactGlove DK3] DK3 グローブでは、手首アクチュエータ(配列インデックス 5)が voice-coil motor(VCM)であるため、shapeValues を反映しません。他の 7 個のモーターは DK2 グローブと同じようにウェイブフォームの形が適用されます。

  • int frequency: [TactGlove DK3 専用] DK3 グローブ自体のアクチュエータの振動周波数(Hz)です。デフォルトは 80 です。DK3 グローブ自体にのみ影響し、接続された他のデバイスの動作周波数は変更しません。DK2 グローブや汎用(non-Windows/macOS)パスには影響しません。Windows/macOS のみ対応します。

  • int repeatCount: ウェイブフォームを繰り返す回数で、1 から数えます。0 は一度だけ再生します。Windows/macOS のみ対応します。

Returns​

リクエスト ID です。リクエスト ID を使用してハプティックを停止できます。失敗した場合は -1 を返します。

ただし Hub に接続されている場合、Hub は戻り値を提供しないため、失敗した呼び出しが -1 を返しません。

Example​

using Bhaptics.SDK2;

public class TestHaptic : MonoBehaviour
{
public void OnCall()
{
int[] motorValues = new int[8] { 50, 80, 100, 0, 0, 0, 0, 0 };

GlovePlayTime[] playTimeValues = new GlovePlayTime[8] {
GlovePlayTime.FiveMS, GlovePlayTime.TwentyMS,
GlovePlayTime.ThirtyMS, GlovePlayTime.None,
GlovePlayTime.None, GlovePlayTime.None,
GlovePlayTime.None, GlovePlayTime.None
};

GloveShapeValue[] shapeValues = new GloveShapeValue[8] {
GloveShapeValue.Constant, GloveShapeValue.Decreasing,
GloveShapeValue.Increasing, GloveShapeValue.Constant,
GloveShapeValue.Constant, GloveShapeValue.Constant,
GloveShapeValue.Constant, GloveShapeValue.Constant
};

BhapticsLibrary.PlayWaveform(
PositionType.GloveL, // Device Type
motorValues, // Intensities
playTimeValues, // Intervals
shapeValues // Intensity changing forms
);
}
}

PlayPath​

public static int PlayPath(
int position,
float[] xValues,
float[] yValues,
int[] intensityValues,
int duration
);

特定の座標の周囲でハプティックを再生します。各ハプティックアクチュエータごとにハプティック Intensity を個別に指定する PlayMotors 関数と異なり、この方法は特定の座標に対するハプティック Intensity を指定します。

ハプティックの位置を指定する際、PlayMotors は離散的な制御を提供するのに対し、PlayPath はより連続的です。PlayMotors は個々のアクチュエータに Intensity を割り当てますが、PlayPath は特定の座標(X 軸と Y 軸ともに 0 から 1 の間)に Intensity を指定でき、それに応じて近くのアクチュエータが振動します。

複数の座標を複数の Intensity とともに指定できます。配列内のこれらの座標の周囲のすべてのアクチュエータは、順次ではなく**同時に(同じ時刻に)**作動する点に注意してください。さらに、すべての配列のサイズは同じでなければなりません。

値を段階的に変更しながらこの関数を継続的に呼び出すことで、ハプティックポイントが移動する効果を得られます。

[TactGlove DK3] PlayPath は DK3 グローブの手首 voice-coil motor(VCM)を駆動しません。

Frame 82.png

Parameters​

  • int position: ハプティックデバイスの種類です。
    値デバイス同じ値...
    0TactSuit ProPositionType.Vest
    1TactSleeve(Left)PositionType.ForearmL
    2TactSleeve(Right)PositionType.ForearmR
    3TactVisorPositionType.Head
    4Tactosy for Hands(Left)PositionType.HandL
    5Tactosy for Hands(Right)PositionType.HandR
    6Tactosy for Feet(Left)PositionType.FootL
    7Tactosy for Feet(Right)PositionType.FootR
    8TactGlove(Left)PositionType.GloveL
    9TactGlove(Right)PositionType.GloveR
  • float[] xValues: X 座標を指定します。配列内の各値の有効範囲: [0.0f - 1.0f]
  • float[] yValues: Y 座標を指定します。配列内の各値の有効範囲: [0.0f - 1.0f]
  • int[] intensityValues: 座標の数に合わせて配列の長さを指定します。配列の値は座標の Intensity を意味します。配列内の各値の有効範囲: [0 - 100]
  • int duration: ハプティックの Duration(ミリ秒単位)です。100 以上を推奨します。

Returns​

リクエスト ID です。リクエスト ID を使用してハプティックを停止できます。失敗した場合は -1 を返します。

ただし Hub に接続されている場合、Hub は戻り値を提供しないため、失敗した呼び出しが -1 を返しません。

Example​

using Bhaptics.SDK2;

/* Assumption:
- For TactSuit Pro
- Coordinate with Intensity
- (X: 0.1, Y: 0.2) Intensity 40
- (X: 0.3, Y: 0.4) Intensity 80
- (X: 0.5, Y: 0.6) Intensity 10
- Duration 500ms(=0.5 second)
*/
public class TestHaptic : MonoBehaviour
{
public void OnCall()
{
BhapticsLibrary.PlayPath(
(int)PositionType.Vest, // Device type
new float[] { 0.1f, 0.3f, 0.5f }, // X Coordinates
new float[] { 0.2f, 0.4f, 0.6f }, // Y Coordinates
new int[] { 40, 80, 10 }, // Intensities
500 // Duration
);
}
}

静的関数 — その他​

using Bhaptics.SDK2;

public class TestHaptic : MonoBehaviour
{
public void OnCall()
{
int requestID = BhapticsLibrary.Play("TestHaptic");

if (BhapticsLibrary.IsPlayingByEventId("TestHaptic"))
{
BhapticsLibrary.StopByEventId("TestHaptic");
}

if (BhapticsLibrary.IsPlayingByRequestId(requestID))
{
BhapticsLibrary.StopInt(requestID);
}

if (BhapticsLibrary.IsPlaying())
{
BhapticsLibrary.StopAll();
}
}
}

StopByEventId​

public static bool StopByEventId(string eventId)

イベント ID でハプティックイベントを停止します。停止の成否を返します。

StopInt​

public static bool StopInt(int requestId)

ハプティックを実行する関数の戻り値であるリクエスト ID を使用して、ハプティックイベントを停止します。停止の成否を返します。

StopAll​

public static bool StopAll()

現在再生中のすべてのハプティックを停止します。停止の成否を返します。

IsPlaying​

public static bool IsPlaying()

現在再生中のハプティックがあるかを確認します。

IsPlayingByEventId​

public static bool IsPlayingByEventId(string eventId)

このイベント ID に該当するハプティックイベントが現在再生中かを確認します。

IsPlayingByRequestId​

public static bool IsPlayingByRequestId(int requestId)

このリクエスト ID に該当するハプティックイベントが現在再生中かを確認します。

PauseByEventId​

public static void PauseByEventId(string eventId)

再生中のハプティックイベントを一時停止します。特定のハプティックイベントを一時停止するには PauseByEventId(string eventId) を使用してください。一時停止したイベントは、後で ResumeByEventId(string eventId) を使用して再開できます。

ResumeByEventId​

public static void ResumeByEventId(string eventId)

一時停止したハプティックイベントを再開します。一時停止した位置から再生を再開するには ResumeByEventId(string eventId) を使用してください。