67 lines
1.6 KiB
C#
67 lines
1.6 KiB
C#
|
using UnityEngine;
|
||
|
|
||
|
public class HapticManager : MonoBehaviour
|
||
|
{
|
||
|
private static HapticManager _instance;
|
||
|
public static HapticManager Instance => _instance;
|
||
|
|
||
|
#if !UNITY_EDITOR && UNITY_WEBGL
|
||
|
[System.Runtime.InteropServices.DllImport("__Internal")]
|
||
|
private static extern bool HapticFeedback(int duration);
|
||
|
|
||
|
[System.Runtime.InteropServices.DllImport("__Internal")]
|
||
|
private static extern int IsHapticSupported();
|
||
|
#endif
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
if (_instance != null && _instance != this)
|
||
|
{
|
||
|
Destroy(gameObject);
|
||
|
return;
|
||
|
}
|
||
|
_instance = this;
|
||
|
DontDestroyOnLoad(gameObject);
|
||
|
|
||
|
#if !UNITY_EDITOR && UNITY_WEBGL
|
||
|
Debug.Log($"Haptic feedback supported: {IsHapticSupported() == 1}");
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
public void LightTap()
|
||
|
{
|
||
|
TriggerHapticFeedback(20);
|
||
|
}
|
||
|
|
||
|
public void MediumTap()
|
||
|
{
|
||
|
TriggerHapticFeedback(40);
|
||
|
}
|
||
|
|
||
|
public void HeavyTap()
|
||
|
{
|
||
|
TriggerHapticFeedback(80);
|
||
|
}
|
||
|
|
||
|
private void TriggerHapticFeedback(int duration)
|
||
|
{
|
||
|
#if !UNITY_EDITOR && UNITY_WEBGL
|
||
|
try
|
||
|
{
|
||
|
if (IsHapticSupported() == 1)
|
||
|
{
|
||
|
bool success = HapticFeedback(duration);
|
||
|
if (success)
|
||
|
{
|
||
|
Debug.Log($"Haptic feedback triggered: {duration}ms");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch (System.Exception e)
|
||
|
{
|
||
|
Debug.LogWarning($"Failed to trigger haptic feedback: {e.Message}");
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
}
|