Files
WhaleAdventure_VR/Assets/My project/RhythmGame/Scripts/RhythmHapticManager.cs
skrwns304@gmail.com b1e85a5b89 2026-06-19 UI, UI로직
2026-06-19 14:27:40 +09:00

55 lines
1.4 KiB
C#

using UnityEngine;
using UnityEngine.XR;
public class RhythmHapticManager : MonoBehaviour
{
[Header("Haptic Target")]
[SerializeField] private XRNode targetHand = XRNode.RightHand;
[Header("Haptic Settings")]
[SerializeField] private bool useHaptic = true;
[SerializeField] private float perfectAmplitude = 0.85f;
[SerializeField] private float perfectDuration = 0.12f;
[SerializeField] private float goodAmplitude = 0.5f;
[SerializeField] private float goodDuration = 0.08f;
[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);
}
}