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: Windows/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, // Delay Time (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, float duration, float angleX, float offsetY);
햅틱의 강도, 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)
);
}
}
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
);
}
}
정적 함수 — 햅틱 직접 재생
새 이벤트를 만들지 않고 햅틱을 재생하고 싶다면 이 함수들을 사용하세요.
PlayMotors
public static int PlayMotors(int position, int[] motors, int durationMillis);
특정 햅틱 액추에이터에서 햅틱 피드백을 재생합니다. 이벤트를 만들지 않고도 이 함수를 사용할 수 있습니다.
Parameters
int position: 햅틱 디바이스의 종류입니다. 자세한 내용은 여기를 참고하세요.값 디바이스 동일한 값... 모터 개수 0TactSuit Pro PositionType.Vest32 1TactSleeve(왼쪽) PositionType.ForearmL3 2TactSleeve(오른쪽) PositionType.ForearmR3 3TactVisor PositionType.Head4 4Tactosy for Hands(왼쪽) PositionType.HandL3 5Tactosy for Hands(오른쪽) PositionType.HandR3 6Tactosy for Feet(왼쪽) PositionType.FootL3 7Tactosy for Feet(오른쪽) PositionType.FootR3 8TactGlove(왼쪽) PositionType.GloveL8 9TactGlove(오른쪽) PositionType.GloveR8 int[] motors: 디바이스의 모터 개수만큼 배열의 길이를 지정합니다. 배열의 값은 모터의 Intensity를 의미합니다. 배열 내 각 값의 유효 범위: [1-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
);
TactGlove 전용. TactGlove에서 햅틱을 재생합니다. PlayMotors를 사용할 때와 달리 햅틱 Duration과 진동 Intensity 변화를 세밀하게 조절할 수 있습니다. 이를 통해 햅틱 피드백을 더욱 섬세하게 표현할 수 있습니다.
각 배열은 여덟 개의 요소를 가져야 하며, 작동하려면 최소 하나의 요소가 필요합니다.
Parameters
-
PositionType positionType: 햅틱 디바이스의 종류입니다.값 디바이스 동일한 값… PositionType.GloveLTactGlove(왼쪽) 8PositionType.GloveRTactGlove(오른쪽) 9 -
int[] motorValues: 여덟 개의 요소로 구성된 배열로, 각 요소는 모터의 Intensity를 나타냅니다. 하나의 TactGlove에는 여덟 개의 모터가 있으므로 배열의 길이는 반드시 8이어야 합니다. 배열 내 각 값의 유효 범위: [1-100]배열 인덱스 모터 위치 0엄지 끝 1검지 끝 2중지 끝 3약지 끝 4새끼손가락 끝 5손목 6손바닥 (엄지 쪽) 7손바닥 (새끼손가락 쪽) -
GlovePlayTime[] playTimeValues: 여덟 개의 요소로 구성된 배열로, 각 요소는 작동 시간 간격을 나타내며 시간은GlovePlayTime열거형으로 정의합니다.값 Duration 동일한 값… GlovePlayTime.None없음 0GlovePlayTime.FiveMS5ms 1GlovePlayTime.TenMS10ms 2GlovePlayTime.TwentyMS20ms 4GlovePlayTime.ThirtyMS30ms 6GlovePlayTime.FortyMS40ms 8 -
GloveShapeValue[] shapeValues: 여덟 개의 요소로 구성된 배열로, 각 요소는 시간에 따른 햅틱 Intensity 변화의 형태를 나타내며GloveShapeValue열거형으로 지정합니다.값 웨이브폼 동일한 값… GloveShapeValue.ConstantDuration 동안 일정한 Intensity 0GloveShapeValue.Decreasing지정한 Intensity로 시작하여 절반까지 감소 1GloveShapeValue.Increasing지정한 Intensity의 절반으로 시작하여 지정한 Intensity까지 증가 2
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와 함께 지정할 수 있습니다. 배열 내 좌표 주변의 모든 액추에이터는 순차적으로 작동하는 것이 아니라 동시에(같은 시간에) 작동한다는 점에 유의하세요. 또한 모든 배열의 크기는 동일해야 합니다.
값을 점진적으로 변경하면서 이 함수를 계속 호출하면 햅틱 포인트가 이동하는 효과를 낼 수 있습니다.

Parameters
int position: 햅틱 디바이스의 종류입니다.값 디바이스 동일한 값... 0TactSuit Pro PositionType.Vest1TactSleeve(왼쪽) PositionType.ForearmL2TactSleeve(오른쪽) PositionType.ForearmR3TactVisor PositionType.Head4Tactosy for Hands(왼쪽) PositionType.HandL5Tactosy for Hands(오른쪽) PositionType.HandR6Tactosy for Feet(왼쪽) PositionType.FootL7Tactosy for Feet(오른쪽) PositionType.FootR8TactGlove(왼쪽) PositionType.GloveL9TactGlove(오른쪽) PositionType.GloveRfloat[] xValues: X 좌표를 지정합니다. 배열 내 각 값의 유효 범위: [0.0f-1.0f]float[] yValues: Y 좌표를 지정합니다. 배열 내 각 값의 유효 범위: [0.0f-1.0f]int[] intensityValues: 좌표의 개수만큼 배열의 길이를 지정합니다. 배열의 값은 좌표의 Intensity를 의미합니다. 배열 내 각 값의 유효 범위: [1-100]int duration: 햅틱의 Duration(밀리초 단위)입니다.100이상을 권장합니다.
Returns
요청 ID입니다. 요청 ID를 사용하여 햅틱을 중지할 수 있습니다. 실패 시 -1을 반환합니다.
다만 Hub에 연결된 경우, Hub는 반환 값을 제공하지 않으므로 실패한 호출이 -1을 반환하지 않습니다.
Example
using Bhaptics.SDK2;
/* Assumption:
- For TactSuit
- 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)를 사용하세요.