Referenzen
Die Klasse BhapticsKit stellt Funktionen zur Steuerung von bHaptics-Haptikgeräten aus Swift bereit. Sie ermöglicht es Ihnen, Haptikgeräte zu verbinden, haptische Pattern abzuspielen, Gerätemotoren direkt zu steuern und die Haptik-Wiedergabe zu verwalten.
import BhapticsPlugin
let kit = BhapticsKit()
Funktionen, die Haptik abspielen, geben eine Request-ID zurück. Mit ihr können Sie die Wiedergabe prüfen oder stoppen.
Lifecycle
init
init()
init(delegate: BhapticsKitDelegate?)
Erstellt die SDK-Instanz. Erstellen Sie eine einzige Instanz und behalten Sie sie während der gesamten Laufzeit Ihrer App bei.
Unter iOS und visionOS startet das Erstellen der Instanz Bluetooth, und das System fragt den Benutzer nach der Bluetooth-Berechtigung.
Parameter
delegate(optional): Empfängt Änderungen des Bluetooth- und Gerätestatus. Siehe BhapticsKitDelegate.
initialize
func initialize(appId: String, apiKey: String, defaultSetting: String) async -> Bool
func initialize(appId: String, apiKey: String, defaultSetting: String)
Initialisiert die Haptik-Umgebung. Diese Funktion sollte aufgerufen werden, bevor die ereignisbezogenen Funktionen verwendet werden.
- Unter iOS und visionOS lädt sie die haptischen Ereignisse Ihrer haptischen App vom Server herunter.
- Unter macOS stellt sie die Verbindung zum bHaptics Player her. Wenn der bHaptics Player installiert ist, aber nicht läuft, startet sie den bHaptics Player.
Die Nicht-async-Version führt dieselbe Initialisierung im Hintergrund aus und gibt kein Ergebnis zurück.
Parameter
appId: Im bHaptics Developer Portal erstellte Anwendungs-ID.apiKey: Im bHaptics Developer Portal erstellter API Key.defaultSetting: Übergeben Sie einen leeren String ("").
Rückgabewert
Erfolgsstatus der Initialisierung.
Beispiel
let result = await kit.initialize(appId: "your_app_id", apiKey: "your_api_key", defaultSetting: "")
print("Initialization result: \(result)")
delegate
var delegate: BhapticsKitDelegate?
Empfängt Änderungen des Bluetooth- und Gerätestatus. Siehe BhapticsKitDelegate.
Ereignisbasierte Haptik abspielen
Spielen Sie haptische Pattern ab, die an bestimmte Ereignisse gebunden sind (entworfen im bHaptics Designer/Portal). Dies sind die empfohlenen Funktionen für die meisten Anwendungen.
play
func play(eventId: String) -> Int
Spielt das vordefinierte haptische Ereignis ab.
Parameter
eventId: Name des haptischen Ereignisses.
Rückgabewert
Request-ID. Sie können sie verwenden, um die Wiedergabe zu stoppen.
Beispiel
let requestId = kit.play(eventId: "heartbeat")
print("Playback request ID: \(requestId)")
playParam
func playParam(
eventId: String,
requestId: Int? = nil,
intensity: Float,
duration: Float,
angleX: Float,
offsetY: Float
) -> Int
Spielt das haptische Ereignis ab und passt dabei die Stärke, die Duration und die Richtung der Haptik an.
Parameter
eventId: Name des haptischen Ereignisses.requestId(optional): Request-ID, die für diese Wiedergabe verwendet werden soll. Wenn sie weggelassen wird, wird eine zufällige ID vergeben.intensity: Multiplikator für die haptische Intensity. Gültiger Bereich: [0.0-2.0] (Standard:1.0)duration: Multiplikator für die Duration. (Standard:1.0)angleX: Dreht die Haptik gegen den Uhrzeigersinn. Gültiger Bereich: [0.0-360.0] (Standard:0.0)offsetY: Bewegt die Haptik nach oben oder unten. Gültiger Bereich: [-0.5-0.5] (Standard:0.0)
Rückgabewert
Request-ID. Sie können sie verwenden, um die Wiedergabe zu stoppen.
Beispiel
let requestId = kit.playParam(eventId: "pistol_r", intensity: 1.0, duration: 1.0, angleX: 0.0, offsetY: 0.0)
playLoop
func playLoop(
eventId: String,
intensity: Float,
duration: Float,
angleX: Float,
offsetY: Float,
interval: Int,
maxCount: Int
) -> Int
Spielt haptische Ereignisse in einer Schleife ab.
Parameter
eventId: Name des haptischen Ereignisses.intensity: Multiplikator für die haptische Intensity. Gültiger Bereich: [0.0-2.0] (Standard:1.0)duration: Multiplikator für die Duration. (Standard:1.0)angleX: Dreht die Haptik gegen den Uhrzeigersinn. Gültiger Bereich: [0.0-360.0] (Standard:0.0)offsetY: Bewegt die Haptik nach oben oder unten. Gültiger Bereich: [-0.5-0.5] (Standard:0.0)interval: Zeitintervall zwischen den Schleifendurchläufen in Millisekunden.maxCount: Anzahl der Schleifendurchläufe.
Rückgabewert
Request-ID. Sie können sie verwenden, um die Wiedergabe zu stoppen.
Beispiel
let requestId = kit.playLoop(eventId: "heartbeat", intensity: 0.8, duration: 1.0, angleX: 90, offsetY: 0, interval: 150, maxCount: 5)
playWithStartTime
func playWithStartTime(
eventId: String,
startMillis: Int,
intensity: Float,
duration: Float,
angleX: Float,
offsetY: Float
) -> Int
Spielt das haptische Ereignis ab einem bestimmten Zeitpunkt ab. Verwenden Sie dies, um Haptik mit bereits laufenden Medien zu synchronisieren.
Parameter
eventId: Name des haptischen Ereignisses.startMillis: Startzeitpunkt der Wiedergabe, gemessen in Millisekunden ab dem Beginn des Ereignisses.intensity: Multiplikator für die haptische Intensity. Gültiger Bereich: [0.0-2.0] (Standard:1.0)duration: Multiplikator für die Duration. (Standard:1.0)angleX: Dreht die Haptik gegen den Uhrzeigersinn. Gültiger Bereich: [0.0-360.0] (Standard:0.0)offsetY: Bewegt die Haptik nach oben oder unten. Gültiger Bereich: [-0.5-0.5] (Standard:0.0)
Rückgabewert
Request-ID. Sie können sie verwenden, um die Wiedergabe zu stoppen.
Beispiel
// Start from 1.5 seconds into the event.
let requestId = kit.playWithStartTime(eventId: "music_video", startMillis: 1500, intensity: 1.0, duration: 1.0, angleX: 0, offsetY: 0)
playWithoutResult
func playWithoutResult(eventId: String, intensity: Float, duration: Float, angleX: Float, offsetY: Float)
Spielt haptische Ereignisse ab, ohne eine Request-ID zurückzugeben (fire-and-forget).
Parameter
eventId: Name des haptischen Ereignisses.intensity: Multiplikator für die haptische Intensity. Gültiger Bereich: [0.0-2.0] (Standard:1.0)duration: Multiplikator für die Duration. (Standard:1.0)angleX: Dreht die Haptik gegen den Uhrzeigersinn. Gültiger Bereich: [0.0-360.0] (Standard:0.0)offsetY: Bewegt die Haptik nach oben oder unten. Gültiger Bereich: [-0.5-0.5] (Standard:0.0)
Beispiel
kit.playWithoutResult(eventId: "heartbeat", intensity: 0.8, duration: 1.0, angleX: 90, offsetY: 0.25)
Haptik direkt abspielen
Wenn Sie Haptik ohne Ereignisse abspielen möchten, verwenden Sie diese Funktionen.
position ist ein Int-Wert, der mit den anderen bHaptics SDKs geteilt wird. Verwenden Sie BhapticsPosition.index, um ihn zu erhalten. Siehe BhapticsPosition.
playDot
@discardableResult
func playDot(position: Int, durationMillis: Int, arr: [Int]) -> Int
Spielt haptisches Feedback auf dem bestimmten haptischen Aktuator ab.
Parameter
position: Typ des Haptikgeräts für die Wiedergabe. Weitere Informationen finden Sie hier.Wert Gerät Anzahl der Motoren 0TactSuit Pro 32 1TactSleeve(Left) 3 2TactSleeve(Right) 3 3TactVisor 4 4Tactosy for Hands(Left) 3 5Tactosy for Hands(Right) 3 6Tactosy for Feet(Left) 3 7Tactosy for Feet(Right) 3 8TactGlove(Left) 8 9TactGlove(Right) 8 durationMillis: Die Duration der Haptik, gemessen in Millisekunden. Ein Wert größer oder gleich100wird empfohlen.arr: Legen Sie die Länge des Arrays entsprechend der Anzahl der Motoren des Geräts fest. Die Werte im Array geben die Intensity der Motoren an. Der gültige Bereich für jeden Wert im Array ist: [0-100]
Rückgabewert
Request-ID. Sie können sie verwenden, um die Wiedergabe zu stoppen.
Beispiel
// Sequentially activate 32 motors
let motorsCount = 32
for i in 0..<motorsCount {
var motors = [Int](repeating: 0, count: motorsCount)
motors[i] = 50
kit.playDot(position: BhapticsPosition.Vest.index, durationMillis: 500, arr: motors)
try await Task.sleep(nanoseconds: 500_000_000)
}
playPath
@discardableResult
func playPath(position: Int, durationMillis: Int, x: [Float], y: [Float], intensity: [Int]) -> Int
Spielt Haptik rund um bestimmte Koordinaten ab. Anders als die Funktion playDot, die die haptische Intensity für jeden haptischen Aktuator einzeln angibt, gibt diese Methode die haptische Intensity für bestimmte Koordinaten an.
Bei der Angabe der haptischen Position bietet playDot eine diskrete Steuerung, während playPath kontinuierlicher ist. playDot weist einzelnen Aktuatoren eine Intensity zu, wohingegen playPath die Angabe einer Intensity für bestimmte Koordinaten (zwischen 0 und 1 sowohl für die X- als auch die Y-Achse) ermöglicht, wodurch die nahegelegenen Aktuatoren entsprechend vibrieren.
Sie können mehrere Koordinaten mit mehreren Intensities angeben. Beachten Sie, dass alle Aktuatoren um diese Koordinaten im Array gleichzeitig (zur selben Zeit) aktiviert werden, nicht nacheinander. Darüber hinaus muss die Größe aller Arrays gleich sein.
Indem Sie diese Funktion kontinuierlich aufrufen und dabei die Werte schrittweise ändern, können Sie den Effekt eines sich bewegenden haptischen Punktes erzielen.

Parameter
position: Typ des Haptikgeräts für die Wiedergabe. Siehe die Tabelle unterplayDot.durationMillis: Die Duration der Haptik, gemessen in Millisekunden. Ein Wert größer oder gleich100wird empfohlen.x: Array von X-Koordinaten für den haptischen Effect. Jeder Wert muss im Bereich liegen: [0.0-1.0]y: Array von Y-Koordinaten für den haptischen Effect. Jeder Wert muss im Bereich liegen: [0.0-1.0]intensity: Array von Intensity-Werten für jede Koordinate. Die Länge muss mit der Anzahl der Koordinaten übereinstimmen. Jeder Wert muss im Bereich liegen: [0-100]
Rückgabewert
Request-ID. Sie können sie verwenden, um die Wiedergabe zu stoppen.
Beispiel
// Path of point #1
let x1: [Float] = [0.738, 0.723, 0.709, 0.696, 0.682, 0.667, 0.653]
let y1: [Float] = [0.680, 0.715, 0.749, 0.782, 0.816, 0.852, 0.885]
// Path of point #2
let x2: [Float] = [0.061, 0.072, 0.102, 0.184, 0.254, 0.310, 0.363]
let y2: [Float] = [0.632, 0.587, 0.542, 0.498, 0.411, 0.366, 0.301]
for i in 0..<x1.count {
// Point #1 and #2 will vibrate at the same time.
kit.playPath(position: BhapticsPosition.Vest.index, durationMillis: 250, x: [x1[i], x2[i]], y: [y1[i], y2[i]], intensity: [20, 60])
try await Task.sleep(nanoseconds: 250_000_000)
}
playGlove
@discardableResult
func playGlove(position: Int, points: [GlovePoint], frequency: Int, repeatCount: Int) -> Int
Nur TactGlove. Spielt Haptik im TactGlove ab. Anders als bei der Verwendung von playDot können Sie die haptische Duration und die Änderungen der Vibrations-Intensity fein einstellen. Dies ermöglicht eine noch detailliertere Darstellung von haptischem Feedback.
Übergeben Sie einen GlovePoint für jeden Motor, den Sie ansteuern möchten. Mindestens ein Punkt ist erforderlich, damit es funktioniert.
struct GlovePoint {
var index: Int
var intensity: Int
var shape: Int
var playTime: Int
init(index: Int, intensity: Int, shape: Int = 0, playTime: Int = 0)
}
Parameter
-
position: Typ des Haptikgeräts für die Wiedergabe. Verwenden Sie nur8oder9.Wert Gerät 8TactGlove(Left) 9TactGlove(Right) -
points: Array vonGlovePoint.-
index: Index des Motors.Index Motor 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 (Seite des kleinen Fingers) -
intensity: Intensity des Motors. Gültiger Bereich: [0-100] -
playTime: Zeitintervall für die Ansteuerung.Wert Playtimes 15ms 210ms 420ms 630ms 840ms -
shape: Form der Änderung der haptischen Intensity im Laufe der Zeit.Wert Waveform 0Konstante Intensity für die Duration 1Beginnt bei der angegebenen Intensity und nimmt um die Hälfte ab 2Beginnt bei der Hälfte der angegebenen Intensity und steigt auf die angegebene an.
-
-
frequency: Vibrationsfrequenz des Handgelenkmotors in Hz. Gilt nur für TactGlove DK3. Übergeben Sie0, um den Standardwert (80) zu verwenden. -
repeatCount: Anzahl der Wiederholungen.
Rückgabewert
Request-ID. Sie können sie verwenden, um die Wiedergabe zu stoppen.
Beispiel
let points = (0..<8).map { GlovePoint(index: $0, intensity: 100, shape: 2, playTime: 8) }
// Left hand
kit.playGlove(position: BhapticsPosition.GloveL.index, points: points, frequency: 0, repeatCount: 1)
// Right hand
kit.playGlove(position: BhapticsPosition.GloveR.index, points: points, frequency: 0, repeatCount: 1)
Wiedergabesteuerung
stopByRequestId
func stopByRequestId(_ requestId: Int)
Stoppt die Haptik-Wiedergabe anhand der Request-ID.
Parameter
requestId: Von der Haptik-Wiedergabefunktion zurückgegebene Request-ID.
Beispiel
let requestId = kit.play(eventId: "shoot")
try await Task.sleep(nanoseconds: 2_000_000_000)
kit.stopByRequestId(requestId)
stopByEventId
func stopByEventId(_ eventId: String)
Stoppt die gesamte Haptik-Wiedergabe für einen bestimmten Ereignisnamen.
Parameter
eventId: Name des haptischen Ereignisses, das Sie stoppen möchten.
stopAll
func stopAll()
Stoppt alle gerade abgespielten Haptiken.
pause
func pause(_ eventId: String)
Pausiert die Wiedergabe eines bestimmten Ereignisses.
Parameter
eventId: Name des haptischen Ereignisses, das Sie pausieren möchten.
resume
func resume(_ eventId: String)
Setzt die pausierte Wiedergabe eines bestimmten Ereignisses fort.
Parameter
eventId: Name des haptischen Ereignisses, das Sie fortsetzen möchten.
turnOffMotors
func turnOffMotors()
Schaltet die Motoren aller verbundenen Geräte sofort ab.
Statusprüfung
isPlaying
func isPlaying() -> Bool
Prüft den gesamten Haptik-Wiedergabestatus. Funktioniert sowohl bei ereignisbasierter als auch bei direkter Wiedergabe.
isPlayingByRequestId
func isPlayingByRequestId(_ requestId: Int) -> Bool
Prüft den Wiedergabestatus einer bestimmten Request-ID. Funktioniert sowohl bei ereignisbasierter als auch bei direkter Wiedergabe.
isPlayingByEventId
func isPlayingByEventId(_ eventId: String) -> Bool
Prüft den Wiedergabestatus eines bestimmten Ereignisses.
getEventList
func getEventList() -> [String]
Gibt die Namen der haptischen Ereignisse in Ihrer haptischen App zurück. Die Liste ist verfügbar, nachdem initialize abgeschlossen ist.
Geräteverwaltung
Unter iOS und visionOS scannt das SDK Haptikgeräte über Bluetooth LE und verbindet sie. Unter macOS werden die Geräte vom bHaptics Player verwaltet: Die Scan- und Kopplungsfunktionen haben keine Wirkung, während getDevices und ping mit den Geräten arbeiten, die mit dem bHaptics Player verbunden sind.
scan
func scan()
Startet die Suche nach bHaptics-Geräten in der Nähe. Gefundene Geräte werden an deviceStateUpdated übermittelt. Gekoppelte Geräte werden automatisch erneut verbunden, wenn sie gefunden werden.
Der Scan startet nur, wenn Bluetooth bereit ist. Rufen Sie diese Funktion auf, nachdem bleStateChange true gemeldet hat.
stopScan
func stopScan()
Beendet den Scan. Geräte, die weder gekoppelt noch verbunden sind, werden aus der Geräteliste entfernt.
isScanning
func isScanning() -> Bool
Prüft, ob das SDK gerade scannt.
toggleScanning
func toggleScanning() -> Bool
Beendet den Scan, wenn das SDK gerade scannt, und startet ihn andernfalls.
Rückgabewert
Ob das SDK nach dem Aufruf scannt.
pair
func pair(device: BhapticsDevice)
Koppelt und verbindet das Gerät. Das SDK merkt sich gekoppelte Geräte über App-Starts hinweg.
Parameter
device: Das zu koppelnde Gerät. Sie erhalten es übergetDevicesoderdeviceStateUpdated.
unpair
func unpair(device: BhapticsDevice)
Hebt die Kopplung des Geräts auf und trennt die Verbindung.
Parameter
device: Das Gerät, dessen Kopplung aufgehoben werden soll.
getDevices
func getDevices() -> [BhapticsDevice]
Gibt die gefundenen und gekoppelten Geräte zurück. Siehe BhapticsDevice.
ping
@discardableResult
func ping(device: String) -> Bool
Sendet ein Ping an ein bestimmtes Gerät. Das Gerät vibriert kurz, sodass der Benutzer es identifizieren kann.
Parameter
device: Dieuuiddes BhapticsDevice.
Rückgabewert
Ob das Ping gesendet wurde.
Beispiel
if let device = kit.getDevices().first {
kit.ping(device: device.uuid)
}
pingAll
@discardableResult
func pingAll() -> Bool
Sendet ein Ping an alle verbundenen Geräte.
Rückgabewert
Ob das Ping gesendet wurde.
getBluetoothState
func getBluetoothState() -> Int
Gibt den Bluetooth-Status zurück. Verwenden Sie dies, um festzustellen, warum keine Geräte gefunden werden.
| Wert | Status |
|---|---|
0 | Unbekannt |
1 | Wird zurückgesetzt |
2 | Nicht unterstützt |
3 | Nicht autorisiert (Bluetooth-Berechtigung wurde verweigert) |
4 | Ausgeschaltet |
5 | Eingeschaltet |
Nur macOS
isPlayerConnected
func isPlayerConnected() -> Bool
Prüft den Verbindungsstatus mit dem bHaptics Player. Gibt unter iOS und visionOS immer false zurück.
onPlayerConnectionChanged
var onPlayerConnectionChanged: ((Bool) -> Void)?
Wird im Main Thread aufgerufen, wenn sich der Verbindungsstatus mit dem bHaptics Player ändert. Nur unter macOS verfügbar.
Beispiel
#if os(macOS)
kit.onPlayerConnectionChanged = { connected in
print("bHaptics Player connected: \(connected)")
}
#endif
Typen
BhapticsKitDelegate
protocol BhapticsKitDelegate {
func bHapticsKit(_ kit: BhapticsKit, bleStateChange state: Bool)
func bHapticsKit(_ kit: BhapticsKit, deviceStateUpdated devices: [BhapticsDevice])
func bHapticsKit(_ kit: BhapticsKit, didConnect device: BhapticsDevice)
func bHapticsKit(_ kit: BhapticsKit, didDisconnect device: BhapticsDevice)
}
Empfängt unter iOS und visionOS Änderungen des Bluetooth- und Gerätestatus.
bleStateChange: Bluetooth ist bereit (true) oder nicht verfügbar (false).deviceStateUpdated: Die Geräteliste hat sich geändert. Wird aufgerufen, wenn ein Gerät gefunden, gekoppelt, entkoppelt, verbunden oder getrennt wird.didConnect: Ein Gerät wurde verbunden.didDisconnect: Ein nicht gekoppeltes Gerät wurde getrennt.
BhapticsDevice
Vom SDK gefundenes Haptikgerät.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
name | String | Name des Geräts. |
uuid | String | Eindeutige Kennung des Geräts. Auch als id verfügbar. |
position | PositionType | Körperteil, an dem das Gerät getragen wird. |
battery | Int | Akkustand in Prozent. -1, falls unbekannt. |
connected | Bool | Ob das Gerät verbunden ist. |
paired | Bool | Ob das Gerät gekoppelt ist. |
BhapticsPosition
Typ des Haptikgeräts. Verwenden Sie index, um ihn an Funktionen wie playDot, playPath und playGlove zu übergeben.
| Case | index | Gerät |
|---|---|---|
.Vest | 0 | TactSuit |
.ForearmL | 1 | TactSleeve(Left) |
.ForearmR | 2 | TactSleeve(Right) |
.Head | 3 | TactVisor |
.HandL | 4 | Tactosy for Hands(Left) |
.HandR | 5 | Tactosy for Hands(Right) |
.FootL | 6 | Tactosy for Feet(Left) |
.FootR | 7 | Tactosy for Feet(Right) |
.GloveL | 8 | TactGlove(Left) |
.GloveR | 9 | TactGlove(Right) |
let position = BhapticsPosition.GloveL.index // 8