using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using Valve.VR;
using Valve.VR.InteractionSystem;
/// <summary>
/// 手按钮事件检测
/// </summary>
public class PlayerHandDetection : MonoBehaviour
{
protected Interactable _interactable;
public SteamVR_Input_Sources _sources = SteamVR_Input_Sources.Any;
public SteamVR_Action_Boolean _pinchAction = SteamVR_Input.GetAction<SteamVR_Action_Boolean>("GrabPinch");
public SteamVR_Action_Boolean _gripAction = SteamVR_Input.GetAction<SteamVR_Action_Boolean>("GrabGrip");
public SteamVR_Action_Boolean _TouchPadAction = SteamVR_Input.GetAction<SteamVR_Action_Boolean>("Teleport");
/// <summary>
/// 触发事件
/// </summary>
public UnityEvent PinchDown;
public UnityEvent PinchStay;
public UnityEvent PinchUp;
public UnityEvent GriphDown;
public UnityEvent GriphUp;
public UnityEvent TouchPadDown;
public UnityEvent TouchPadUp;
public UnityEvent PinchTriggerDown;
public int Type;
/// <summary>
/// 初始化
/// </summary>
private void Awake()
{
_interactable = this.GetComponent<Interactable>();
}
/// <summary>
/// 手进入物体中更新检测
/// </summary>
/// <param name="hand"></param>
public virtual void HandHoverUpdate(Hand hand)
{
if (hand.handType == _sources || _sources == SteamVR_Input_Sources.Any)
{
if (_pinchAction.GetStateDown(hand.handType))
{
if (PinchDown == null)
{
return;
}
PinchTriggerDown.Invoke();
}
}
}
/// <summary>
/// 手抓取到物体更新检测
/// </summary>
/// <param name="hand"></param>
public virtual void HandAttachedUpdate(Hand hand)
{
if (hand.handType == _sources || _sources == SteamVR_Input_Sources.Any)
{
if (_pinchAction.GetStateDown(hand.handType))
{
if (PinchDown == null)
{
return;
}
PinchDown.Invoke();
}
if (_pinchAction.GetState(hand.handType))
{
if (PinchUp == null)
{
return;
}
PinchStay.Invoke();
}
if (_pinchAction.GetStateUp(hand.handType))
{
if (PinchUp == null)
{
return;
}
PinchUp.Invoke();
}
if (_gripAction.GetStateDown(hand.handType))
{
if (GriphDown == null)
{
return;
}
GriphDown.Invoke();
}
if (_gripAction.GetStateUp(hand.handType))
{
if (GriphUp == null)
{
return;
}
GriphUp.Invoke();
}
if (_TouchPadAction.GetStateDown(hand.handType))
{
if (TouchPadDown == null)
{
return;
}
TouchPadDown.Invoke();
}
if (_TouchPadAction.GetStateUp(hand.handType))
{
if (TouchPadUp == null)
{
return;
}
TouchPadUp.Invoke();
}
}
}
/// <summary>
/// 手抓取物体回调
/// </summary>
/// <param name="hand"></param>
protected virtual void OnAttachedToHand(Hand hand)
{
}
/// <summary>
/// 手松开物体回调
/// </summary>
/// <param name="hand"></param>
protected virtual void OnDetachedFromHand(Hand hand)
{
}
}