diff --git a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRController.cs b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRController.cs index fd0847f..cd54ada 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRController.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRController.cs @@ -247,6 +247,14 @@ namespace Passer.Tracking { renderers[i].enabled = showModel; } + public virtual void Vibrate(float length, float strength) { + if (device.TryGetHapticCapabilities(out var capabilities) && + capabilities.supportsImpulse) { + + device.SendHapticImpulse(0u, strength, length); + } + } + #endregion Init #endif } diff --git a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs index 81982c0..eb42578 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs @@ -139,6 +139,12 @@ namespace Passer.Humanoid { controllerInputSide.option |= controller.option > 0; } + public override void Vibrate(float length, float strength) { + UnityXRController unityXrController = sensorComponent as UnityXRController; + if (unityXrController != null) + unityXrController.Vibrate(length, strength); + } + // arm model for 3DOF tracking: position is calculated from rotation static public Vector3 CalculateHandPosition(HandTarget handTarget, Vector3 sensor2TargetPosition) { Quaternion hipsYRotation = Quaternion.AngleAxis(handTarget.humanoid.hipsTarget.transform.eulerAngles.y, handTarget.humanoid.up);