Zum Hauptinhalt springen
Diese Seite wurde automatisch übersetzt und kann Fehler enthalten. Original auf Englisch ansehen

Class BhapticsLibrary

Die Klasse BhapticsLibrary enthält die Funktionen zur Nutzung der Haptik-Geräte von bHaptics.

Referenzen

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

Statische Funktionen — Event-gesteuerte Haptik abspielen

Spielt die Haptik-Pattern ab, die an ein bestimmtes, in Designer/Portal erstelltes Haptik-Event gebunden sind. Wir empfehlen dringend, diese Funktionen zu verwenden.

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);

Spielt ein Haptik-Event ab und passt dabei Stärke, Duration und Richtung der Haptik an.

Parameters

  • string eventId: Name des Haptik-Events, das Sie abspielen möchten.
  • int startMillis: Startposition der Wiedergabe in Millisekunden. Die ersten startMillis Millisekunden des Events werden übersprungen (dies ist ein Start-Offset, keine Verzögerung vor der Wiedergabe). Der Standardwert ist 0. Nur Windows/macOS/Android.
  • float intensity: Die haptische Intensity wird mit diesem Wert multipliziert.
  • float duration: Die haptische Duration wird mit diesem Wert multipliziert.
  • float angleX: Dreht die Haptik gegen den Uhrzeigersinn um die globale Vector3.up. Gültiger Bereich: [0.0f - 360.0f]
  • float offsetY: Bewegt die Haptik nach oben oder unten. Gültiger Bereich: [-0.5f - 0.5f]

Returns

Request ID. Sie können die Request ID verwenden, um die Haptik zu stoppen. Bei einem Fehlschlag wird -1 zurückgegeben.

Bei Verbindung mit dem Hub geben fehlgeschlagene Aufrufe jedoch kein -1 zurück, da der Hub keinen Rückgabewert bereitstellt.

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);

Spielt ein Haptik-Event ab und passt dabei Stärke, Duration und Richtung der Haptik an.

Parameters

  • string eventId: Name des Haptik-Events, das Sie abspielen möchten.
  • float intensity: Die haptische Intensity wird mit diesem Wert multipliziert.
  • float duration: Die haptische Duration wird mit diesem Wert multipliziert.
  • float angleX: Dreht die Haptik gegen den Uhrzeigersinn um die globale Vector3.up. Gültiger Bereich: [0.0f - 360.0f]
  • float offsetY: Bewegt die Haptik nach oben oder unten. Gültiger Bereich: [-0.5f - 0.5f]

Returns

Request ID. Sie können die Request ID verwenden, um die Haptik zu stoppen. Bei einem Fehlschlag wird -1 zurückgegeben.

Bei Verbindung mit dem Hub geben fehlgeschlagene Aufrufe jedoch kein -1 zurück, da der Hub keinen Rückgabewert bereitstellt.

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);

Spielt ein Haptik-Event ab und passt dabei die Richtung der Haptik an. Dies ist ein komfortabler Wrapper um PlayParam mit auf 1.0f festgelegtem intensity und duration.

Parameters

  • string eventId: Name des Haptik-Events, das Sie abspielen möchten.
  • float angleX: Dreht die Haptik gegen den Uhrzeigersinn um die globale Vector3.up. Gültiger Bereich: [0.0f - 360.0f]
  • float offsetY: Bewegt die Haptik nach oben oder unten. Gültiger Bereich: [-0.5f - 0.5f]

Returns

Request ID. Sie können die Request ID verwenden, um die Haptik zu stoppen. Bei einem Fehlschlag wird -1 zurückgegeben.

Bei Verbindung mit dem Hub geben fehlgeschlagene Aufrufe jedoch kein -1 zurück, da der Hub keinen Rückgabewert bereitstellt.

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
);

Spielt die Haptik wiederholt ab. Zusätzlich können Sie, wie bei der Funktion PlayHapticWithOption, Stärke, Duration und Richtung der Haptik anpassen.

Parameters

  • string eventId: Name des Haptik-Events, das Sie abspielen möchten.
  • float intensity: Die haptische Intensity wird mit diesem Wert multipliziert.
  • float duration: Die haptische Duration wird mit diesem Wert multipliziert.
  • float angleX: Dreht die Haptik gegen den Uhrzeigersinn um die globale Vector3.up. Gültiger Bereich: [0.0f - 360.0f]
  • float offsetY: Bewegt die Haptik nach oben oder unten. Gültiger Bereich: [-0.5f - 0.5f]
  • int interval: Das Zeitintervall zwischen den Wiederholungen, gemessen in Millisekunden.
  • int maxCount: Die Anzahl der Wiederholungen.

Returns

Request ID. Sie können die Request ID verwenden, um die Haptik zu stoppen. Bei einem Fehlschlag wird -1 zurückgegeben.

Bei Verbindung mit dem Hub geben fehlgeschlagene Aufrufe jedoch kein -1 zurück, da der Hub keinen Rückgabewert bereitstellt.

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);

Spielt die Haptik wiederholt ab. Dies ist ein komfortabler Wrapper um PlayLoop mit auf 1.0f festgelegtem intensity und duration und ohne Richtungsanpassung.

Parameters

  • string eventId: Name des Haptik-Events, das Sie abspielen möchten.
  • int interval: Das Zeitintervall zwischen den Wiederholungen, gemessen in Millisekunden.
  • int maxCount: Die Anzahl der Wiederholungen.

Returns

Request ID. Sie können die Request ID verwenden, um die Haptik zu stoppen. Bei einem Fehlschlag wird -1 zurückgegeben.

Bei Verbindung mit dem Hub geben fehlgeschlagene Aufrufe jedoch kein -1 zurück, da der Hub keinen Rückgabewert bereitstellt.

Statische Funktionen — Haptik direkt abspielen

Wenn Sie Haptik abspielen möchten, ohne ein neues Event zu erstellen, verwenden Sie diese Funktionen.

PlayMotors

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

Spielt haptisches Feedback am angegebenen Haptik-Aktuator ab. Sie können diese Funktion verwenden, ohne ein Event zu erstellen.

Parameters

  • int position: Typ des Haptik-Geräts. Weitere Informationen finden Sie hier.
    WertGerätEntspricht…Motoranzahl
    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: Legen Sie die Länge des Arrays entsprechend der Anzahl der Motoren des Geräts fest. Die Werte im Array bezeichnen die Intensity der Motoren. Gültiger Bereich für jeden Wert im Array: [0 - 100]
  • int durationMillis: Die Duration der Haptik, gemessen in Millisekunden. Ein Wert größer oder gleich 100 wird empfohlen.

Returns

Request ID. Sie können die Request ID verwenden, um die Haptik zu stoppen. Bei einem Fehlschlag wird -1 zurückgegeben.

Bei Verbindung mit dem Hub geben fehlgeschlagene Aufrufe jedoch kein -1 zurück, da der Hub keinen Rückgabewert bereitstellt.

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
);

Nur TactGlove. Spielt Haptik im TactGlove ab. Anders als bei PlayMotors können Sie die haptische Duration und die Änderungen der Vibrations-Intensity fein anpassen. Dies ermöglicht eine noch feinere Darstellung von haptischem Feedback.

Jedes Array (motorValues, playTimeValues, shapeValues) muss sechs Elemente für TactGlove DK2 oder acht Elemente für TactGlove DK3 enthalten, und alle drei Arrays müssen dieselbe Länge haben. Jede andere Länge gibt -1 zurück.

Parameters

  • PositionType positionType: Typ des Haptik-Geräts.

    WertGerätEntspricht…
    PositionType.GloveLTactGlove(Left)8
    PositionType.GloveRTactGlove(Right)9
  • int[] motorValues: Ein Array, das die Intensity jedes Motors darstellt. Seine Länge muss der Anzahl der Motoren im TactGlove entsprechen: sechs (TactGlove DK2) oder acht (TactGlove DK3). Die Handflächen-Motoren an den Array-Indizes 6 und 7 (in der Tabelle unten) existieren nur auf DK3. Gültiger Bereich für jeden Wert im Array: [0 - 100]

    Array IndexMotor befindet sich an…
    0Spitze des Daumens
    1Spitze des Zeigefingers
    2Spitze des Mittelfingers
    3Spitze des Ringfingers
    4Spitze des kleinen Fingers
    5Am Handgelenk
    6An der Handfläche (Daumenseite)
    7An der Handfläche (Kleinfingerseite)
  • GlovePlayTime[] playTimeValues: Ein Array mit derselben Länge wie motorValues (sechs für DK2, acht für DK3), wobei jedes Element ein Zeitintervall für die Aktuierung darstellt, wobei die Zeit über GlovePlayTime-Enums definiert wird.

    WertDurationEntspricht…
    GlovePlayTime.NoneKeine0
    GlovePlayTime.FiveMS5ms1
    GlovePlayTime.TenMS10ms2
    GlovePlayTime.TwentyMS20ms4
    GlovePlayTime.ThirtyMS30ms6
    GlovePlayTime.FortyMS40ms8
  • GloveShapeValue[] shapeValues: Ein Array mit derselben Länge wie motorValues (sechs für DK2, acht für DK3), wobei jedes Element die Form der zeitlichen Änderung der haptischen Intensity darstellt, angegeben durch die GloveShapeValue-Enums.

    WertWaveformEntspricht…
    GloveShapeValue.ConstantKonstante Intensity für die Duration0
    GloveShapeValue.DecreasingBeginnt bei der angegebenen Intensity und nimmt um die Hälfte ab1
    GloveShapeValue.IncreasingBeginnt bei der Hälfte der angegebenen Intensity und steigt bis zur angegebenen an.2

    [TactGlove DK3] Auf dem DK3-Glove ist der Handgelenk-Aktuator (Array-Index 5) ein Voice-Coil-Motor (VCM) und berücksichtigt shapeValues nicht. Die anderen sieben Motoren wenden die Waveform-Form genauso an wie auf DK2-Gloves.

  • int frequency: [Nur TactGlove DK3] Vibrationsfrequenz in Hz der eigenen Aktuatoren des DK3-Gloves. Der Standardwert ist 80. Dies betrifft nur das DK3-Glove selbst und ändert nicht die Betriebsfrequenz anderer verbundener Geräte. Es hat keine Auswirkung auf DK2-Gloves oder auf den universellen (Nicht-Windows/macOS-)Pfad. Nur Windows/macOS.

  • int repeatCount: Anzahl der Wiederholungen der Waveform, ab 1. 0 spielt sie einmal ab. Nur Windows/macOS.

Returns

Request ID. Sie können die Request ID verwenden, um die Haptik zu stoppen. Bei einem Fehlschlag wird -1 zurückgegeben.

Bei Verbindung mit dem Hub geben fehlgeschlagene Aufrufe jedoch kein -1 zurück, da der Hub keinen Rückgabewert bereitstellt.

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
);

Spielt Haptik um bestimmte Koordinaten herum ab. Anders als die Funktion PlayMotors, die die haptische Intensity für jeden Haptik-Aktuator einzeln angibt, gibt diese Methode die haptische Intensity für bestimmte Koordinaten an.

Bei der Angabe der Haptik-Position bietet PlayMotors eine diskrete Steuerung, während PlayPath kontinuierlicher ist. PlayMotors weist einzelnen Aktuatoren Intensity zu, während PlayPath die Angabe von Intensity für bestimmte Koordinaten ermöglicht (zwischen 0 und 1 für die X- und Y-Achse), wodurch nahegelegene Aktuatoren entsprechend vibrieren.

Sie können mehrere Koordinaten mit mehreren Intensities angeben. Beachten Sie, dass alle Aktuatoren um diese Koordinaten im Array herum gleichzeitig (zur selben Zeit) aktiviert werden, nicht nacheinander. Außerdem muss die Größe aller Arrays gleich sein.

Indem Sie diese Funktion fortlaufend aufrufen und dabei die Werte schrittweise ändern, können Sie den Effekt eines sich bewegenden Haptik-Punkts erzielen.

[TactGlove DK3] PlayPath steuert den Handgelenk-Voice-Coil-Motor (VCM) eines DK3-Gloves nicht an.

Frame 82.png

Parameters

  • int position: Typ des Haptik-Geräts.
    WertGerätEntspricht…
    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: Legt die X-Koordinate fest. Gültiger Bereich für jeden Wert im Array: [0.0f - 1.0f]
  • float[] yValues: Legt die Y-Koordinate fest. Gültiger Bereich für jeden Wert im Array: [0.0f - 1.0f]
  • int[] intensityValues: Legen Sie die Länge des Arrays entsprechend der Anzahl der Koordinaten fest. Die Werte im Array bezeichnen die Intensity der Koordinaten. Gültiger Bereich für jeden Wert im Array: [0 - 100]
  • int duration: Die Duration der Haptik, gemessen in Millisekunden. Ein Wert größer oder gleich 100 wird empfohlen.

Returns

Request ID. Sie können die Request ID verwenden, um die Haptik zu stoppen. Bei einem Fehlschlag wird -1 zurückgegeben.

Bei Verbindung mit dem Hub geben fehlgeschlagene Aufrufe jedoch kein -1 zurück, da der Hub keinen Rückgabewert bereitstellt.

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
);
}
}

Statische Funktionen — Sonstige

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)

Stoppt das Haptik-Event anhand der Event ID. Gibt zurück, ob das Stoppen erfolgreich war.

StopInt

public static bool StopInt(int requestId)

Stoppt das Haptik-Event anhand der Request ID, die von der Funktion zurückgegeben wird, die die Haptik ausführt. Gibt zurück, ob das Stoppen erfolgreich war.

StopAll

public static bool StopAll()

Stoppt alle aktuell abgespielten Haptiken. Gibt zurück, ob das Stoppen erfolgreich war.

IsPlaying

public static bool IsPlaying()

Prüft, ob aktuell eine Haptik abgespielt wird.

IsPlayingByEventId

public static bool IsPlayingByEventId(string eventId)

Prüft, ob das Haptik-Event für diese Event ID aktuell abgespielt wird.

IsPlayingByRequestId

public static bool IsPlayingByRequestId(int requestId)

Prüft, ob das Haptik-Event für diese Request ID aktuell abgespielt wird.

PauseByEventId

public static void PauseByEventId(string eventId)

Pausiert ein aktives Haptik-Event. Verwenden Sie PauseByEventId(string eventId), um ein bestimmtes Haptik-Event zu pausieren. Das pausierte Event kann später mit ResumeByEventId(string eventId) fortgesetzt werden.

ResumeByEventId

public static void ResumeByEventId(string eventId)

Setzt ein pausiertes Haptik-Event fort. Verwenden Sie ResumeByEventId(string eventId), um die Wiedergabe an der Position fortzusetzen, an der sie pausiert wurde.