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);
ハプティックの強さ、Duration、方向を調整しながらハプティックイベントを再生します。
Parameters
string eventId: 再生したいハプティックイベントの名前です。int startMillis: イベント再生を開始する位置(ms)です。先頭のstartMillisms はスキップされます(再生前の遅延ではなく、開始 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]
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)
);
}
}
PlayParam
public static int PlayParam(string eventId, float intensity = 1.0f, float duration = 1.0f, float angleX = 0.0f, float offsetY = 0.0f);
ハプティックの強さ、Duration、方向を調整しながらハプティックイベントを再生します。
Parameters
string eventId: 再生したいハプティックイベントの名前です。float intensity: ハプティック Intensity にこの値が掛けられます。float duration: ハプティック Duration にこの値が掛けられます。float angleX: グローバルなVector3.upを中心にハプティックを反時計回りに回転します。有効範囲: [0.0f-360.0f]float offsetY: ハプティックを上または下に移動します。有効範囲: [-0.5f-0.5f]
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 Pro PositionType.Vest32 1TactSleeve(Left) PositionType.ForearmL3 2TactSleeve(Right) PositionType.ForearmR3 3TactVisor PositionType.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) 8PositionType.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なし 0GlovePlayTime.FiveMS5ms 1GlovePlayTime.TenMS10ms 2GlovePlayTime.TwentyMS20ms 4GlovePlayTime.ThirtyMS30ms 6GlovePlayTime.FortyMS40ms 8 -
GloveShapeValue[] shapeValues:motorValuesと同じ長さ(DK2 は 6 個、DK3 は 8 個)の配列で、各要素は時間に応じたハプティック Intensity の変化の形を表し、GloveShapeValue列挙型で指定します。値 ウェイブフォーム 同じ値… GloveShapeValue.ConstantDuration の間、一定の Intensity 0GloveShapeValue.Decreasing指定した Intensity で始まり、半分まで減少 1GloveShapeValue.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)を駆動しません。

Parameters
int position: ハプティックデバイスの種類です。値 デバイス 同じ値... 0TactSuit Pro PositionType.Vest1TactSleeve(Left) PositionType.ForearmL2TactSleeve(Right) PositionType.ForearmR3TactVisor PositionType.Head4Tactosy for Hands(Left) PositionType.HandL5Tactosy for Hands(Right) PositionType.HandR6Tactosy for Feet(Left) PositionType.FootL7Tactosy for Feet(Right) PositionType.FootR8TactGlove(Left) PositionType.GloveL9TactGlove(Right) PositionType.GloveRfloat[] 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) を使用してください。