Aller au contenu principal
Cette page a été traduite automatiquement et peut contenir des erreurs. Voir l’original en anglais

Class UBhapticsSDK2

Hérite de UBlueprintFunctionLibrary


La classe UBhapticsSDK2 contient les fonctions permettant d'utiliser les périphériques haptiques de bHaptics.

Références​

ModuleBhapticsPlugin
HeaderEngine\Plugins\Marketplace\BhapticsPlugin\Source\BhapticsPlugin\Public\BhapticsSDK2.h
Include#include "BhapticsSDK2.h"

Fonctions statiques — Lecture haptique basée sur les événements​

Lit les motifs haptiques liés à un événement haptique spécifique créé depuis Designer/Portal. Nous vous recommandons vivement d'utiliser ces fonctions.

PlayHaptic​

static int PlayHaptic(FString eventId);

Lit l'événement haptique. C'est la manière la plus simple d'appeler un événement haptique. Cette fonction possède la plus faible surcharge parmi toutes les fonctions d'appel d'événement haptique.

Paramètres​

  • FString eventId: Nom de l'événement haptique que vous souhaitez lire.

Valeur de retour​

Request ID. Vous pouvez utiliser le Request ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.

Cependant, lorsqu'il est connecté au Hub, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.

Exemple​

#include "BhapticsSDK2.h"

void AExample::Shoot()
{
// Assuming the event name is "shootpistol"
UBhapticsSDK2::PlayHaptic("shootpistol");
}

PlayHapticWithOption​

static int PlayHapticWithOption(FString eventId, float intensity = 1.0f, float duration = 1.0f, float angleX = 0.0f, float offsetY = 0.0f, int requestId = -1);

Lit l'événement haptique en ajustant l'intensité, la durée et la direction du retour haptique.

Paramètres​

  • FString eventId: Nom de l'événement haptique que vous souhaitez 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 du Vector3.up global. 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 requestId : Spécifie un Request ID au lieu d'utiliser un ID aléatoire. Les valeurs valides sont 0 ou plus. Si la valeur est omise ou négative, un ID aléatoire est attribué.
    Réutiliser un Request ID

    Normalement, si vous lisez un retour haptique pendant qu'un autre est encore en cours de lecture, la nouvelle lecture se superpose à celle en cours. En revanche, si vous le lisez avec les mêmes eventId et requestId que le retour haptique en cours, la lecture en cours s'arrête et la nouvelle démarre. Chaque retour haptique est ainsi ressenti plus distinctement, et les retours haptiques ne s'empilent pas lorsqu'ils sont lus de manière répétée à intervalles courts.

    Chronologies de lecture selon eventId et requestId

Valeur de retour​

Request ID. Vous pouvez utiliser le Request ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.

Cependant, lorsqu'il est connecté au Hub, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.

Exemple​

#include "BhapticsSDK2.h"

void AExample::Shoot()
{
UBhapticsSDK2::PlayHapticWithOption(
"shootpistol", // Haptic name
1.0f, // Haptic intensity
1.0f, // Haptic duration
0.0f, // Rotate haptic around global Vector3.up (0f - 360f)
0.0f // Move haptic up or down (-0.5f - 0.5f)
);
}

PlayWithStartTime​

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

Lit l'événement haptique en ajustant l'intensité, la durée et la direction du retour haptique.

Paramètres​

  • FString eventId: Nom de l'événement haptique que vous souhaitez lire.
  • int startMillis: Position de départ de la lecture en millisecondes. Les premiers startMillis millisecondes de l'événement sont ignorées (il s'agit d'un Offset de départ, pas d'un délai avant la lecture). La valeur par défaut est 0. Windows/macOS/Android only.
  • 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 du Vector3.up global. 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 requestId : Spécifie un Request ID au lieu d'utiliser un ID aléatoire. Les valeurs valides sont 0 ou plus. Si la valeur est omise ou négative, un ID aléatoire est attribué.
    Réutiliser un Request ID

    Normalement, si vous lisez un retour haptique pendant qu'un autre est encore en cours de lecture, la nouvelle lecture se superpose à celle en cours. En revanche, si vous le lisez avec les mêmes eventId et requestId que le retour haptique en cours, la lecture en cours s'arrête et la nouvelle démarre. Chaque retour haptique est ainsi ressenti plus distinctement, et les retours haptiques ne s'empilent pas lorsqu'ils sont lus de manière répétée à intervalles courts.

    Chronologies de lecture selon eventId et requestId

Valeur de retour​

Request ID. Vous pouvez utiliser le Request ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.

Cependant, lorsqu'il est connecté au Hub, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.

Exemple​

#include "BhapticsSDK2.h"

void AExample::Shoot()
{
UBhapticsSDK2::PlayWithStartTime(
"shootpistol", // Haptic name
0, // Playback start position (millisecond)
1.0f, // Haptic intensity
1.0f, // Haptic duration
0.0f, // Rotate haptic around global Vector3.up (0f - 360f)
0.0f // Move haptic up or down (-0.5f - 0.5f)
);
}

PlayLoop​

static int PlayLoop(FString 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 de façon répétée. De plus, comme la fonction PlayHapticWithOption, vous pouvez ajuster l'intensité, la durée et la direction du retour haptique.

Paramètres​

  • FString eventId: Nom de l'événement haptique que vous souhaitez 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 du Vector3.up global. 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: L'intervalle de temps entre les boucles, exprimé en millisecondes.
  • int maxCount: Le nombre de boucles.

Valeur de retour​

Request ID. Vous pouvez utiliser le Request ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.

Cependant, lorsqu'il est connecté au Hub, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.

Exemple​

#include "BhapticsSDK2.h"

void AExample::Shoot()
{
UBhapticsSDK2::PlayLoop(
"shootpistol", // Haptic name
1.0f, // Haptic intensity
1.0f, // Haptic duration
0.0f, // Rotate haptic around global Vector3.up (0f - 360f)
0.0f, // Move haptic up or down (-0.5f - 0.5f)
200, // Loop interval time (millisecond)
999999 // Loop count
);
}

Fonctions statiques — Lecture haptique directe​

Si vous souhaitez lire des retours haptiques sans créer de nouvel événement, utilisez ces fonctions.

PlayDot​

static int PlayDot(int position, TArray<int> motorValues, float seconds = 0.5f);

Lit le retour haptique sur l'actionneur haptique spécifié. Vous pouvez utiliser cette fonction sans créer d'événement.

Paramètres​

  • int position: Type de périphérique haptique. Pour plus d'informations, veuillez consulter ici.
    ValeurPériphériqueIdentique à…Nombre de moteurs
    0TactSuit ProEBhapticsDevicePosition::Vest32
    1TactSleeve(Left)EBhapticsDevicePosition::ForearmL3
    2TactSleeve(Right)EBhapticsDevicePosition::ForearmR3
    3TactVisorEBhapticsDevicePosition::Head4
    4Tactosy for Hands(Left)EBhapticsDevicePosition::HandL3
    5Tactosy for Hands(Right)EBhapticsDevicePosition::HandR3
    6Tactosy for Feet(Left)EBhapticsDevicePosition::FootL3
    7Tactosy for Feet(Right)EBhapticsDevicePosition::FootR3
    8TactGlove(Left)EBhapticsDevicePosition::GloveL8
    9TactGlove(Right)EBhapticsDevicePosition::GloveR8
  • TArray<int> motorValues: Définissez la longueur du tableau en fonction du nombre de moteurs du périphérique. Les valeurs du tableau représentent l'Intensity des moteurs. Plage valide pour chaque valeur : [0 - 100]
  • float seconds: La Duration du retour haptique, exprimée en secondes. Une valeur supérieure ou égale à 0.1f est recommandée.

Valeur de retour​

Request ID. Vous pouvez utiliser le Request ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.

Cependant, lorsqu'il est connecté au Hub, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.

Exemple​

#include "BhapticsSDK2.h"

void AExample::Shoot()
{
// TactSuit Pro has 32 motors, so length of array should be 32 too.
TArray<int> MotorValueArray = TArray<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};

UBhapticsSDK2::PlayDot(
(int)EBhapticsDevicePosition::Vest, // Device type
MotorValueArray, // Haptic intensities
0.5f // Haptic duration (second)
);
}

PlayPath​

static int PlayPath(int position, TArray<float> x, TArray<float> y, TArray<int> motorValues, float seconds = 0.5);

Lit le retour haptique autour de coordonnées spécifiques. Contrairement à la fonction PlayDot, qui spécifie individuellement l'Intensity haptique pour chaque actionneur, cette méthode spécifie l'Intensity haptique pour des coordonnées particulières.

Lors de la spécification de la position haptique, PlayDot offre un contrôle discret, tandis que PlayPath est plus continu. PlayDot attribue une Intensity à chaque actionneur individuellement, tandis que PlayPath attribue une Intensity à des coordonnées spécifiques (entre 0 et 1 pour les axes X et Y), ce qui entraîne la vibration des actionneurs à proximité en conséquence.

Vous pouvez placer plusieurs coordonnées avec plusieurs intensités dans le tableau. Notez que tous les actionneurs autour de ces coordonnées dans le tableau s'activeront simultanément (au même instant), et non séquentiellement. De plus, la taille de tous les tableaux doit être identique.

En appelant continuellement cette fonction 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.

Frame 82.png

Paramètres​

  • int position: Type de périphérique haptique.
    ValeurPériphériqueIdentique à…
    0TactSuit ProEBhapticsDevicePosition::Vest
    1TactSleeve(Left)EBhapticsDevicePosition::ForearmL
    2TactSleeve(Right)EBhapticsDevicePosition::ForearmR
    3TactVisorEBhapticsDevicePosition::Head
    4Tactosy for Hands(Left)EBhapticsDevicePosition::HandL
    5Tactosy for Hands(Right)EBhapticsDevicePosition::HandR
    6Tactosy for Feet(Left)EBhapticsDevicePosition::FootL
    7Tactosy for Feet(Right)EBhapticsDevicePosition::FootR
    8TactGlove(Left)EBhapticsDevicePosition::GloveL
    9TactGlove(Right)EBhapticsDevicePosition::GloveR
  • TArray<float> x: Définit la coordonnée X. Plage valide pour chaque valeur : [0.0f - 1.0f]
  • TArray<float> y: Définit la coordonnée Y. Plage valide pour chaque valeur : [0.0f - 1.0f]
  • TArray<int> motorValues: Définissez la longueur du tableau en fonction du nombre de coordonnées. Les valeurs du tableau représentent l'Intensity des coordonnées. Plage valide pour chaque valeur : [0 - 100]
  • float seconds: La Duration du retour haptique, exprimée en secondes. Une valeur supérieure ou égale à 0.1f est recommandée.

Valeur de retour​

Request ID. Vous pouvez utiliser le Request ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.

Cependant, lorsqu'il est connecté au Hub, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.

Exemple​

#include "BhapticsSDK2.h"

/* 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 0.5 second
*/
void AExample::Shoot()
{
UBhapticsSDK2::PlayPath(
(int)EBhapticsDevicePosition::Vest, // Device Type
TArray<float>{0.1f, 0.3f, 0.5f}, // X Coordinates
TArray<float>{0.2f, 0.4f, 0.6f}, // Y Coordinates
TArray<int>{40, 80, 10}, // Intensities
0.5f // Duration
);
}

PlayWaveform​

static int PlayWaveform(int position, TArray<int> motorIntensities, TArray<EBhapticsGlovePlayTime> playTimeValues, TArray<EBhapticsGloveShapeValue> shapeValues, int frequency = 80, int repeatCount = 0);

TactGlove uniquement. Lit des retours haptiques sur le TactGlove. Contrairement à PlayDot, 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 (motorIntensities, playTimeValues, shapeValues) doit contenir six éléments pour TactGlove DK2 ou huit éléments pour TactGlove DK3, et les trois tableaux doivent avoir la même longueur. Toute autre longueur retourne -1.

Paramètres​

  • int position: Type de périphérique haptique.

    ValeurPériphériqueIdentique à…
    8TactGlove(Left)EBhapticsDevicePosition::GloveL
    9TactGlove(Right)EBhapticsDevicePosition::GloveR
  • TArray<int> motorIntensities: Un 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 indices de tableau 6 et 7 (dans le tableau ci-dessous) existent uniquement sur le DK3. Plage valide pour chaque valeur : [0 - 100]

    Index du tableauPosition 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)
  • TArray<EBhapticsGlovePlayTime> playTimeValues: Un tableau de même longueur que motorIntensities (six pour DK2, huit pour DK3), chaque élément représentant un intervalle de temps d'activation, défini à l'aide des enums EBhapticsGlovePlayTime.

    ValeurDurationIdentique à…
    EBhapticsGlovePlayTime::NoneAucune0
    EBhapticsGlovePlayTime::FiveMS5ms1
    EBhapticsGlovePlayTime::TenMS10ms2
    EBhapticsGlovePlayTime::TwentyMS20ms4
    EBhapticsGlovePlayTime::ThirtyMS30ms6
    EBhapticsGlovePlayTime::FortyMS40ms8
  • TArray<EBhapticsGloveShapeValue> shapeValues: Un tableau de même longueur que motorIntensities (six pour DK2, huit pour DK3), chaque élément représentant la forme des variations d'Intensity haptique dans le temps, spécifiée par les enums EBhapticsGloveShapeValue.

    ValeurForme d'ondeIdentique à…
    EBhapticsGloveShapeValue::ConstantIntensity constante pendant la Duration0
    EBhapticsGloveShapeValue::DecreasingCommence à l'Intensity spécifiée et diminue de moitié1
    EBhapticsGloveShapeValue::IncreasingCommence à 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 (index de tableau 5) est un moteur à bobine mobile (VCM) et ne reflète pas les shapeValues. Les sept autres moteurs appliquent la forme d'onde de la même manière que sur les gants DK2.

  • int frequency: [TactGlove DK3 only] Fréquence de vibration en Hz des actionneurs propres au gant DK3. La valeur par défaut est 80. Cela n'affecte que le gant DK3 lui-même et ne modifie pas la fréquence de fonctionnement de tout autre périphérique connecté. N'a aucun effet sur les gants DK2 ni sur le chemin universel (non-Windows/macOS). Windows/macOS only.

  • int repeatCount: Nombre de répétitions de la forme d'onde, à partir de 1. 0 la joue une seule fois. Windows/macOS only.

Valeur de retour​

Request ID. Vous pouvez utiliser le Request ID pour arrêter le retour haptique. Retourne -1 en cas d'échec.

Cependant, lorsqu'il est connecté au Hub, les appels échoués ne retournent pas -1 car le Hub ne fournit pas de valeur de retour.

Exemple​

#include "BhapticsSDK2.h"

void AExample::Shoot()
{
TArray<int> GloveMotorValue = TArray<int>{50, 50, 50, 50, 50, 50, 50, 50};

TArray<EBhapticsGlovePlayTime> GlovePlayTime = {
EBhapticsGlovePlayTime::FiveMS, EBhapticsGlovePlayTime::TenMS,
EBhapticsGlovePlayTime::TwentyMS, EBhapticsGlovePlayTime::ThirtyMS,
EBhapticsGlovePlayTime::FortyMS, EBhapticsGlovePlayTime::None,
EBhapticsGlovePlayTime::None, EBhapticsGlovePlayTime::None};

TArray<EBhapticsGloveShapeValue> GloveShapeValue = {
EBhapticsGloveShapeValue::Constant, EBhapticsGloveShapeValue::Decreasing,
EBhapticsGloveShapeValue::Increasing, EBhapticsGloveShapeValue::Constant,
EBhapticsGloveShapeValue::Decreasing, EBhapticsGloveShapeValue::Increasing,
EBhapticsGloveShapeValue::Constant, EBhapticsGloveShapeValue::Constant};

UBhapticsSDK2::PlayWaveform(
(int)EBhapticsDevicePosition::GloveL, // Device Type
GloveMotorValue, // Intensities
GlovePlayTime, // Intervals
GloveShapeValue // Intensity changing forms
);
}

Fonctions statiques — Autres​

StopHapticByEventId​

static bool StopHapticByEventId(FString eventId);

Arrête l'événement haptique par Event ID. Retourne si l'arrêt a réussi.

#include "BhapticsSDK2.h"

void AExample::Example()
{
UBhapticsSDK2::StopHapticByEventId("eventID");
}

StopHapticByRequestId​

static bool StopHapticByRequestId(int requestId);

Arrête l'événement haptique en utilisant le Request ID retourné par la fonction qui exécute le retour haptique. Retourne si l'arrêt a réussi.

#include "BhapticsSDK2.h"

void AExample::Example()
{
int RequestID = UBhapticsSDK2::PlayHaptic("eventID");
UBhapticsSDK2::StopHapticByRequestId(RequestID);
}

StopHaptic​

static bool StopHaptic();

Arrête tous les retours haptiques en cours de lecture. Retourne si l'arrêt a réussi.

#include "BhapticsSDK2.h"

void AExample::Example()
{
UBhapticsSDK2::PlayHaptic("bangbang");
UBhapticsSDK2::PlayHaptic("eventID");
UBhapticsSDK2::PlayHaptic("explosion");

UBhapticsSDK2::StopHaptic();
}

PauseHapticByEventId​

static void PauseHapticByEventId(FString eventId);

Met en pause l'événement haptique par Event ID. La position de lecture est conservée afin de pouvoir reprendre ultérieurement avec ResumeHapticByEventId.

#include "BhapticsSDK2.h"

void AExample::Example()
{
UBhapticsSDK2::PauseHapticByEventId("eventID");
}

ResumeHapticByEventId​

static void ResumeHapticByEventId(FString eventId);

Reprend un événement haptique précédemment mis en pause avec PauseHapticByEventId, en continuant depuis la position où il a été mis en pause.

#include "BhapticsSDK2.h"

void AExample::Example()
{
UBhapticsSDK2::ResumeHapticByEventId("eventID");
}

IsPlaying​

static bool IsPlaying();

Vérifie si le retour haptique est en cours de lecture.

#include "BhapticsSDK2.h"

void AExample::Example()
{
if (UBhapticsSDK2::IsPlaying())
{
StopHaptic();
}
}

IsPlayingByEventId​

static bool IsPlayingByEventId(FString eventId);

Vérifie si l'événement haptique correspondant à cet Event ID est en cours de lecture.

#include "BhapticsSDK2.h"

void AExample::Example()
{
UBhapticsSDK2::PlayHaptic("eventID");

if (UBhapticsSDK2::IsPlayingByEventId("eventID"))
{
UBhapticsSDK2::StopHapticByEventId("eventID");
}
}

IsPlayingByRequestId​

static bool IsPlayingByRequestId(int requestId);

Vérifie si l'événement haptique correspondant à ce Request ID est en cours de lecture.

#include "BhapticsSDK2.h"

void AExample::Example()
{
int RequestID = UBhapticsSDK2::PlayHaptic("eventID");
if (UBhapticsSDK2::IsPlayingByRequestId(RequestID))
{
UBhapticsSDK2::StopHapticByRequestId(RequestID);
}
}

Initialize​

static void Initialize();

Initialise l'environnement haptique. Cette fonction doit être appelée avant d'utiliser les fonctions liées au retour haptique.

Ping​

static void Ping(FBhapticsDevice device);

Envoie un retour haptique simple à un périphérique spécifique.

PingAll​

static void PingAll();

Envoie un retour haptique simple à tous les périphériques connectés.

Destroy​

static void Destroy();

Détruit l'environnement haptique. Cette fonction doit être appelée à la fin du jeu et ne doit être appelée QU'UNE SEULE FOIS.

GetBhapticsDevices​

static TArray<FBhapticsDevice> GetBhapticsDevices();

Obtient un tableau d'informations sur les périphériques haptiques connectés.

IsBhapticsAvailable​

static bool IsBhapticsAvailable();

Vérifie si l'environnement haptique est initialisé et prêt à utiliser les fonctions liées au retour haptique.

ProjectToVest​

static FBhapticsRotationOption ProjectToVest(
FVector ContactLocation,
UPrimitiveComponent* PlayerComponent,
float HalfHeight = 0
);

Fonction utilitaire permettant de calculer les valeurs d'Offset (angle et hauteur) d'un point de contact de collision donné par rapport au joueur. Ces valeurs d'Offset peuvent être utilisées dans PlayHapticWithOption et PlayLoop pour ajuster la position haptique.

Cette fonction suppose que la direction avant est alignée avec l'avant du gilet, et la position du joueur est considérée comme l'origine.

Consultez l'exemple ci-dessous pour des informations détaillées.

Paramètres​

  • FVector ContactLocation: Point de contact en coordonnées globales.
  • UPrimitiveComponent* PlayerComponent: Référence au composant primitif attaché au joueur.
  • float HalfHeight: La moitié de la hauteur réelle du joueur, exprimée en centimètres.

Exemple​

Supposons l'implémentation d'un retour haptique lorsque le joueur est touché par une balle dans un jeu VR. Le motif haptique correspondant à cet événement serait un retour haptique court et intense au centre avant du TactSuit. Pour renforcer le réalisme, il serait idéal de faire varier la hauteur et l'angle du retour haptique selon l'endroit où le joueur est touché.

Les fonctions PlayHapticWithOption et PlayLoop permettent d'ajuster la hauteur et l'angle du motif haptique. Ces fonctions prennent des valeurs d'angle (OffsetAngleX) et de hauteur (OffsetY) pour l'ajustement haptique.

La fonction ProjectToVest calcule les valeurs d'angle et de hauteur en fonction de l'endroit où le joueur est touché, des informations de transform du joueur et de la taille de l'utilisateur. Ces valeurs sont ensuite encapsulées dans la structure FBhapticsRotationOption et retournées.

Frame 81 (1).png

#include "BhapticsSDK2.h"

void AExample::HitByBullet()
{
APawn *PlayerPawn = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);
UPrimitiveComponent *PlayerComponent = Cast<UPrimitiveComponent>(PlayerPawn->GetRootComponent());

FVector ContactLocation = USomewhere::GetContactLocationSomehow();
float HalfHeight = YourActualHeight / 2;

FBhapticsRotationOption result = UBhapticsSDK2::ProjectToVest(ContactLocation, PlayerComponent, HalfHeight);

UBhapticsSDK2::PlayHapticWithOption("hit_by_bullet", 1.0f, 1.0f, result.OffsetAngleX, result.OffsetY);
}

ProjectToVestLocation​

static FBhapticsRotationOption ProjectToVestLocation(FVector ContactLocation, FVector PlayerLocation, FRotator PlayerRotation);

Fonction utilitaire permettant de calculer les valeurs d'Offset à partir d'un emplacement de contact et des informations de transform du joueur. Similaire à ProjectToVest, mais ne calcule que l'Offset angulaire (OffsetAngleX). La hauteur (OffsetY) sera toujours 0.

Paramètres​

  • FVector ContactLocation: Point de contact en coordonnées globales.
  • FVector PlayerLocation: Emplacement du joueur.
  • FRotator PlayerRotation: Rotation du joueur.

CustomProjectToVest​

static FBhapticsRotationOption CustomProjectToVest(FVector ContactLocation, UPrimitiveComponent* PlayerComponent, float HalfHeight = 0, FVector UpVector = FVector::ZeroVector, FVector ForwardVector = FVector::ZeroVector);

Fonction utilitaire permettant de calculer les valeurs d'Offset à partir d'une collision. Remplit la même fonction que ProjectToVest, mais permet de modifier les vecteurs Forward et Up.

  • FVector ContactLocation: Point de contact en coordonnées globales.
  • UPrimitiveComponent* PlayerComponent: Référence au composant primitif attaché au joueur.
  • float HalfHeight: La moitié de la hauteur réelle du joueur, exprimée en centimètres.
  • FVector UpVector: Vecteur de direction vers le haut de référence pour le calcul d'Offset.
  • FVector ForwardVector: Vecteur de direction vers l'avant de référence pour le calcul d'Offset.