using UnityEngine; using UnityEngine.XR; public class FishingHapticManager : MonoBehaviour { [Header("Haptic Target")] [SerializeField] private XRNode targetHand = XRNode.RightHand; [Header("Haptic Settings")] [SerializeField] private bool useHaptic = true; [SerializeField] private float perfectAmplitude = 1f; [SerializeField] private float perfectDuration = 0.2f; [SerializeField] private float goodAmplitude = 0.5f; [SerializeField] private float goodDuration = 0.1f; [SerializeField] private float missAmplitude = 0.2f; [SerializeField] private float missDuration = 0.05f; private void SendHaptic(float amplitude, float duration) { if (!useHaptic) return; InputDevice device = InputDevices.GetDeviceAtXRNode(targetHand); if (!device.isValid) return; if (device.TryGetHapticCapabilities(out HapticCapabilities capabilities)) { if (!capabilities.supportsImpulse) return; } device.SendHapticImpulse(0u, Mathf.Clamp01(amplitude), duration); } public void Perfect() { SendHaptic(perfectAmplitude, perfectDuration); } public void Good() { SendHaptic(goodAmplitude, goodDuration); } public void Miss() { SendHaptic(missAmplitude, missDuration); } }