194 lines
5.8 KiB
C#
194 lines
5.8 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Unity.XR.PXR;
|
|
using UnityEngine;
|
|
using UnityEngine.XR;
|
|
using static Unity.XR.PXR.PXR_Input;
|
|
|
|
public class MRInput : MonoBehaviour
|
|
{
|
|
public static MRInput Ins { get; private set; }
|
|
|
|
private InputDevice _leftHandDevice;
|
|
private InputDevice _rightHandDevice;
|
|
|
|
#if UNITY_EDITOR
|
|
[UnityEngine.DisplayOnly]
|
|
#endif
|
|
public bool pressLeftTrigger = false;
|
|
private bool _lastPressLeftTrigger = false;
|
|
private List<System.Action> _clickLeftTriggerhandlers = new List<System.Action>();
|
|
|
|
#if UNITY_EDITOR
|
|
[UnityEngine.DisplayOnly]
|
|
#endif
|
|
public bool holdPressLeftTrigger = false;
|
|
private List<System.Action> _holdPressLeftTriggerhandlers = new List<System.Action>();
|
|
|
|
|
|
#if UNITY_EDITOR
|
|
[UnityEngine.DisplayOnly]
|
|
#endif
|
|
public bool pressRightTrigger = false;
|
|
private bool _lastPressRightTrigger = false;
|
|
private List<System.Action> _clickRightTriggerhandlers = new List<System.Action>();
|
|
|
|
#if UNITY_EDITOR
|
|
[UnityEngine.DisplayOnly]
|
|
#endif
|
|
public bool holdPressRightTrigger = false;
|
|
private List<System.Action> _holdPressRightTriggerhandlers = new List<System.Action>();
|
|
|
|
void Start()
|
|
{
|
|
Ins = this;
|
|
#if !UNITY_EDITOR && UNITY_ANDROID && PICO
|
|
_leftHandDevice = InputDevices.GetDeviceAtXRNode(XRNode.LeftHand);
|
|
_rightHandDevice = InputDevices.GetDeviceAtXRNode(XRNode.RightHand);
|
|
#endif
|
|
}
|
|
|
|
/// <summary>
|
|
/// 注册点击左trigger事件
|
|
/// </summary>
|
|
public void RegisterClickLeftTrigger(System.Action handler)
|
|
{
|
|
_clickLeftTriggerhandlers.Add(handler);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 注册点击左trigger持续点击事件
|
|
/// </summary>
|
|
public void RegisterHoldPressLeftTrigger(System.Action handler)
|
|
{
|
|
_holdPressLeftTriggerhandlers.Add(handler);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 注册点击右trigger事件
|
|
/// </summary>
|
|
public void RegisterClickRrightTrigger(System.Action handler)
|
|
{
|
|
_clickRightTriggerhandlers.Add(handler);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 注册点击右trigger持续点击事件
|
|
/// </summary>
|
|
public void RegisterHoldPressRightTrigger(System.Action handler)
|
|
{
|
|
_holdPressRightTriggerhandlers.Add(handler);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 震动左手控制器
|
|
/// </summary>
|
|
public void VibrateLeftController(float amplitude, int duration, int frequency = 150)
|
|
{
|
|
#if !UNITY_EDITOR && UNITY_ANDROID && PICO
|
|
PXR_Input.SendHapticImpulse(VibrateType.LeftController, amplitude, duration, frequency);
|
|
#endif
|
|
}
|
|
|
|
/// <summary>
|
|
/// 震动右手控制器
|
|
/// </summary>
|
|
public void VibrateRightController(float amplitude, int duration, int frequency = 150)
|
|
{
|
|
|
|
#if !UNITY_EDITOR && UNITY_ANDROID && PICO
|
|
PXR_Input.SendHapticImpulse(VibrateType.RightController, amplitude, duration, frequency);
|
|
#endif
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if(GameLocal.Ins.self==null||GameLocal.Ins.self.isDie)
|
|
return;
|
|
if(GameManager.Ins==null|| !GameManager.Ins.isStart)
|
|
return;
|
|
#if !UNITY_EDITOR && UNITY_ANDROID && PICO
|
|
if (_leftHandDevice != null)
|
|
{
|
|
bool isTrigger = false;
|
|
_leftHandDevice.TryGetFeatureValue(CommonUsages.triggerButton, out isTrigger);
|
|
pressLeftTrigger = isTrigger;
|
|
if (!_lastPressLeftTrigger && pressLeftTrigger)
|
|
{
|
|
for (int i = 0; i < _clickLeftTriggerhandlers.Count; i++)
|
|
{
|
|
_clickLeftTriggerhandlers[i].Invoke();
|
|
}
|
|
}
|
|
_lastPressLeftTrigger = isTrigger;
|
|
|
|
holdPressLeftTrigger = isTrigger;
|
|
if (holdPressLeftTrigger)
|
|
{
|
|
for (int i = 0; i < _holdPressLeftTriggerhandlers.Count; i++)
|
|
{
|
|
_holdPressLeftTriggerhandlers[i].Invoke();
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_rightHandDevice != null)
|
|
{
|
|
bool isTrigger = false;
|
|
_rightHandDevice.TryGetFeatureValue(CommonUsages.triggerButton, out isTrigger);
|
|
pressRightTrigger = isTrigger;
|
|
if (!_lastPressRightTrigger && pressRightTrigger)
|
|
{
|
|
for (int i = 0; i < _clickRightTriggerhandlers.Count; i++)
|
|
{
|
|
_clickRightTriggerhandlers[i].Invoke();
|
|
}
|
|
}
|
|
_lastPressRightTrigger = isTrigger;
|
|
|
|
holdPressRightTrigger = isTrigger;
|
|
if (holdPressRightTrigger)
|
|
{
|
|
for (int i = 0; i < _holdPressRightTriggerhandlers.Count; i++)
|
|
{
|
|
_holdPressRightTriggerhandlers[i].Invoke();
|
|
}
|
|
}
|
|
}
|
|
|
|
#elif UNITY_EDITOR
|
|
pressLeftTrigger = Input.GetKey(KeyCode.Alpha1) ? true : false;
|
|
if (Input.GetKeyDown(KeyCode.Alpha1))
|
|
{
|
|
for (int i = 0; i < _clickLeftTriggerhandlers.Count; i++)
|
|
{
|
|
_clickLeftTriggerhandlers[i].Invoke();
|
|
}
|
|
}
|
|
else if (Input.GetKey(KeyCode.Alpha1))
|
|
{
|
|
for (int i = 0; i < _holdPressLeftTriggerhandlers.Count; i++)
|
|
{
|
|
_holdPressLeftTriggerhandlers[i].Invoke();
|
|
}
|
|
}
|
|
|
|
pressRightTrigger = Input.GetKey(KeyCode.Alpha2) ? true : false;
|
|
if (Input.GetKeyDown(KeyCode.Alpha2))
|
|
{
|
|
for (int i = 0; i < _clickRightTriggerhandlers.Count; i++)
|
|
{
|
|
_clickRightTriggerhandlers[i].Invoke();
|
|
}
|
|
}
|
|
else if (Input.GetKey(KeyCode.Alpha2))
|
|
{
|
|
for (int i = 0; i < _holdPressRightTriggerhandlers.Count; i++)
|
|
{
|
|
_holdPressRightTriggerhandlers[i].Invoke();
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
}
|