54 lines
1.3 KiB
C#
54 lines
1.3 KiB
C#
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);
|
|
}
|
|
} |