Class BhapticsLibrary
La classe BhapticsLibrary contient les fonctions permettant d'utiliser les dispositifs haptiques de bHaptics.
Références
- Chemin : Assets\Bhaptics\SDK2\Scripts\Core\Plugins\BhapticsLibrary.cs
Fonctions statiques — Lecture haptique basée sur les événements
Lisez les motifs haptiques liés à un événement haptique spécifique créé depuis Designer/Portal. Nous recommandons vivement l'utilisation de ces fonctions.
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);
Lit un événement haptique en ajustant la force, la Duration et la direction du retour haptique.
Parameters
string eventId: Nom de l'événement haptique à lire.int startMillis: Position de départ de la lecture en millisecondes. Les premiersstartMillismillisecondes de l'événement sont ignorés (il s'agit d'un décalage de départ, non d'un délai avant la lecture). La valeur par défaut est0. Windows/macOS/Android uniquement.float intensity: L'Intensity haptique est multipliée par cette valeur.float duration: La Duration haptique est multipliée par cette valeur.float angleX: Fait pivoter le retour haptique dans le sens antihoraire autour duVector3.upglobal. Plage valide : [0.0f-360.0f]float offsetY: Déplace le retour haptique vers le haut ou vers le bas. Plage valide : [-0.5f-0.5f]
Returns
ID de requête. Vous pouvez utiliser cet ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.
Cependant, lorsque le Hub est connecté, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.
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);
Lit un événement haptique en ajustant la force, la Duration et la direction du retour haptique.
Parameters
string eventId: Nom de l'événement haptique à lire.float intensity: L'Intensity haptique est multipliée par cette valeur.float duration: La Duration haptique est multipliée par cette valeur.float angleX: Fait pivoter le retour haptique dans le sens antihoraire autour duVector3.upglobal. Plage valide : [0.0f-360.0f]float offsetY: Déplace le retour haptique vers le haut ou vers le bas. Plage valide : [-0.5f-0.5f]
Returns
ID de requête. Vous pouvez utiliser cet ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.
Cependant, lorsque le Hub est connecté, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.
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);
Lit un événement haptique en ajustant uniquement la direction du retour haptique. Il s'agit d'un raccourci autour de PlayParam avec intensity et duration fixées à 1.0f.
Parameters
string eventId: Nom de l'événement haptique à lire.float angleX: Fait pivoter le retour haptique dans le sens antihoraire autour duVector3.upglobal. Plage valide : [0.0f-360.0f]float offsetY: Déplace le retour haptique vers le haut ou vers le bas. Plage valide : [-0.5f-0.5f]
Returns
ID de requête. Vous pouvez utiliser cet ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.
Cependant, lorsque le Hub est connecté, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.
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
);
Lit le retour haptique en boucle. De plus, comme la fonction PlayHapticWithOption, vous pouvez ajuster la force, la Duration et la direction du retour haptique.
Parameters
string eventId: Nom de l'événement haptique à lire.float intensity: L'Intensity haptique est multipliée par cette valeur.float duration: La Duration haptique est multipliée par cette valeur.float angleX: Fait pivoter le retour haptique dans le sens antihoraire autour duVector3.upglobal. Plage valide : [0.0f-360.0f]float offsetY: Déplace le retour haptique vers le haut ou vers le bas. Plage valide : [-0.5f-0.5f]int interval: Intervalle de temps entre les boucles, exprimé en millisecondes.int maxCount: Nombre de boucles.
Returns
ID de requête. Vous pouvez utiliser cet ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.
Cependant, lorsque le Hub est connecté, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.
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);
Lit le retour haptique en boucle. Il s'agit d'un raccourci autour de PlayLoop avec intensity et duration fixées à 1.0f et sans ajustement directionnel.
Parameters
string eventId: Nom de l'événement haptique à lire.int interval: Intervalle de temps entre les boucles, exprimé en millisecondes.int maxCount: Nombre de boucles.
Returns
ID de requête. Vous pouvez utiliser cet ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.
Cependant, lorsque le Hub est connecté, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.
Fonctions statiques — Lecture haptique directe
Si vous souhaitez lire des retours haptiques sans créer d'événement, utilisez ces fonctions.
PlayMotors
public static int PlayMotors(int position, int[] motors, int durationMillis);
Lit un retour haptique sur un actionneur haptique spécifique. Vous pouvez utiliser cette fonction sans créer d'événement.
Parameters
int position: Type de dispositif haptique. Pour plus d'informations, consultez ici.Valeur Dispositif Équivalent à… Nombre de moteurs 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: Définissez la longueur du tableau selon le nombre de moteurs du dispositif. Les valeurs dans le tableau représentent l'Intensity de chaque moteur. Plage valide pour chaque valeur du tableau : [0-100]int durationMillis: La Duration du retour haptique, exprimée en millisecondes. Une valeur supérieure ou égale à100est recommandée.
Returns
ID de requête. Vous pouvez utiliser cet ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.
Cependant, lorsque le Hub est connecté, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.
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 uniquement. Lit des retours haptiques sur le TactGlove. Contrairement à PlayMotors, vous pouvez régler finement la Duration haptique et les variations d'Intensity de vibration. Cela permet une expression encore plus précise du retour haptique.
Chaque tableau (motorValues, playTimeValues, shapeValues) doit contenir six éléments pour le TactGlove DK2 ou huit éléments pour le TactGlove DK3, et les trois tableaux doivent avoir la même longueur. Toute autre longueur retourne -1.
Parameters
-
PositionType positionType: Type de dispositif haptique.Valeur Dispositif Équivalent à… PositionType.GloveLTactGlove(Left) 8PositionType.GloveRTactGlove(Right) 9 -
int[] motorValues: Tableau représentant l'Intensity de chaque moteur. Sa longueur doit correspondre au nombre de moteurs du TactGlove : six (TactGlove DK2) ou huit (TactGlove DK3). Les moteurs de la paume aux indices6et7(voir le tableau ci-dessous) n'existent que sur le DK3. Plage valide pour chaque valeur du tableau : [0-100]Indice du tableau Position du moteur 0Bout du pouce 1Bout de l'index 2Bout du majeur 3Bout de l'annulaire 4Bout de l'auriculaire 5Sur le poignet 6Sur la paume (côté pouce) 7Sur la paume (côté auriculaire) -
GlovePlayTime[] playTimeValues: Tableau de même longueur quemotorValues(six pour DK2, huit pour DK3), où chaque élément représente un intervalle de temps pour l'actionnement, défini à l'aide des énumérationsGlovePlayTime.Valeur Duration Équivalent à… GlovePlayTime.NoneAucune 0GlovePlayTime.FiveMS5ms 1GlovePlayTime.TenMS10ms 2GlovePlayTime.TwentyMS20ms 4GlovePlayTime.ThirtyMS30ms 6GlovePlayTime.FortyMS40ms 8 -
GloveShapeValue[] shapeValues: Tableau de même longueur quemotorValues(six pour DK2, huit pour DK3), où chaque élément représente la forme des variations d'Intensity haptique dans le temps, spécifiée par les énumérationsGloveShapeValue.Valeur Forme d'onde Équivalent à… GloveShapeValue.ConstantIntensity constante pendant toute la Duration 0GloveShapeValue.DecreasingDémarre à l'Intensity spécifiée et diminue de moitié 1GloveShapeValue.IncreasingDémarre à la moitié de l'Intensity spécifiée et augmente jusqu'à l'Intensity spécifiée. 2[TactGlove DK3] Sur le gant DK3, l'actionneur du poignet (indice de tableau
5) est un moteur à bobine mobile (VCM) et ne reflète pas lesshapeValues. Les sept autres moteurs appliquent la forme d'onde de la même manière que sur les gants DK2. -
int frequency: [TactGlove DK3 uniquement] Fréquence de vibration en Hz des actionneurs propres au gant DK3. La valeur par défaut est80. Cela n'affecte que le gant DK3 lui-même et ne modifie pas la fréquence de fonctionnement des autres dispositifs connectés. N'a aucun effet sur les gants DK2 ni sur le chemin universel (non-Windows/macOS). Windows/macOS uniquement. -
int repeatCount: Nombre de répétitions de la forme d'onde, à partir de1.0la lit une seule fois. Windows/macOS uniquement.
Returns
ID de requête. Vous pouvez utiliser cet ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.
Cependant, lorsque le Hub est connecté, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.
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
);
Lit un retour haptique autour de coordonnées spécifiques. Contrairement à la fonction PlayMotors, qui spécifie l'Intensity haptique pour chaque actionneur individuellement, cette méthode spécifie l'Intensity haptique pour des coordonnées particulières.
Pour la spécification de la position haptique, PlayMotors offre un contrôle discret tandis que PlayPath est plus continu. PlayMotors attribue une Intensity aux actionneurs individuels, tandis que PlayPath permet de spécifier une Intensity pour des coordonnées précises (entre 0 et 1 sur les axes X et Y), provoquant la vibration des actionneurs proches.
Vous pouvez saisir plusieurs coordonnées avec plusieurs Intensity. Notez que tous les actionneurs autour de ces coordonnées dans le tableau s'activeront simultanément (en même temps), et non séquentiellement. De plus, la taille de tous les tableaux doit être identique.
En appelant cette fonction en continu tout en modifiant progressivement les valeurs, vous pouvez obtenir l'effet d'un point haptique en mouvement.
[TactGlove DK3] PlayPath ne pilote pas le moteur à bobine mobile (VCM) du poignet sur un gant DK3.

Parameters
int position: Type de dispositif haptique.Valeur Dispositif Équivalent à… 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: Définit la coordonnée X. Plage valide pour chaque valeur du tableau : [0.0f-1.0f]float[] yValues: Définit la coordonnée Y. Plage valide pour chaque valeur du tableau : [0.0f-1.0f]int[] intensityValues: Définissez la longueur du tableau selon le nombre de coordonnées. Les valeurs dans le tableau représentent l'Intensity de chaque coordonnée. Plage valide pour chaque valeur du tableau : [0-100]int duration: La Duration du retour haptique, exprimée en millisecondes. Une valeur supérieure ou égale à100est recommandée.
Returns
ID de requête. Vous pouvez utiliser cet ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.
Cependant, lorsque le Hub est connecté, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.
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
);
}
}
Fonctions statiques — Autres
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)
Arrête l'événement haptique par son ID d'événement. Retourne si l'arrêt a réussi.
StopInt
public static bool StopInt(int requestId)
Arrête l'événement haptique en utilisant l'ID de requête retourné par la fonction d'exécution du retour haptique. Retourne si l'arrêt a réussi.
StopAll
public static bool StopAll()
Arrête tous les retours haptiques en cours de lecture. Retourne si l'arrêt a réussi.
IsPlaying
public static bool IsPlaying()
Vérifie si un retour haptique est en cours de lecture.
IsPlayingByEventId
public static bool IsPlayingByEventId(string eventId)
Vérifie si l'événement haptique correspondant à cet ID d'événement est en cours de lecture.
IsPlayingByRequestId
public static bool IsPlayingByRequestId(int requestId)
Vérifie si l'événement haptique correspondant à cet ID de requête est en cours de lecture.
PauseByEventId
public static void PauseByEventId(string eventId)
Met en pause un événement haptique actif. Utilisez PauseByEventId(string eventId) pour mettre en pause un événement haptique spécifique. L'événement mis en pause peut ensuite être repris à l'aide de ResumeByEventId(string eventId).
ResumeByEventId
public static void ResumeByEventId(string eventId)
Reprend un événement haptique mis en pause. Utilisez ResumeByEventId(string eventId) pour reprendre la lecture depuis la position où elle a été mise en pause.