VR模拟枪支打靶,消灭鬼怪,换弹以及上弦等等硬核枪支操作。 使用HTCVive设备,开启SteamVR进行游玩。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

75 lines
3.5 KiB

//========= Copyright 2016-2018, HTC Corporation. All rights reserved. ===========
using HTC.UnityPlugin.ColliderEvent;
using HTC.UnityPlugin.Utility;
using UnityEngine;
using UnityEngine.Serialization;
namespace HTC.UnityPlugin.Vive
{
[AddComponentMenu("HTC/VIU/Object Grabber/Vive Collider Event Caster (Grabber)", 2)]
public class ViveColliderEventCaster : ColliderEventCaster, IViveRoleComponent
{
[SerializeField]
private ViveRoleProperty m_viveRole = ViveRoleProperty.New(HandRole.RightHand);
[SerializeField]
[CustomOrderedEnum]
private ControllerButton m_buttonTrigger = ControllerButton.Trigger;
[SerializeField]
[CustomOrderedEnum]
private ControllerButton m_buttonPadOrStick = ControllerButton.Pad;
[SerializeField]
[CustomOrderedEnum]
private ControllerButton m_buttonGripOrHandTrigger = ControllerButton.Grip;
[SerializeField]
[CustomOrderedEnum]
private ControllerButton m_buttonFunctionKey = ControllerButton.Menu;
[SerializeField]
[FormerlySerializedAs("m_buttonEvents")]
[FlagsFromEnum(typeof(ControllerButton))]
private uint m_additionalButtons = 0;
[SerializeField]
private ScrollType m_scrollType = ScrollType.Auto;
[SerializeField]
private Vector2 m_scrollDeltaScale = new Vector2(1f, -1f);
public ViveRoleProperty viveRole { get { return m_viveRole; } }
public ScrollType scrollType { get { return m_scrollType; } set { m_scrollType = value; } }
public Vector2 scrollDeltaScale { get { return m_scrollDeltaScale; } set { m_scrollDeltaScale = value; } }
#if UNITY_EDITOR
protected virtual void OnValidate()
{
FilterOutAssignedButton();
}
#endif
protected void FilterOutAssignedButton()
{
m_additionalButtons = EnumUtils.UnsetFlag(m_additionalButtons, (int)m_buttonTrigger);
m_additionalButtons = EnumUtils.UnsetFlag(m_additionalButtons, (int)m_buttonPadOrStick);
m_additionalButtons = EnumUtils.UnsetFlag(m_additionalButtons, (int)m_buttonFunctionKey);
m_additionalButtons = EnumUtils.UnsetFlag(m_additionalButtons, (int)m_buttonGripOrHandTrigger);
}
protected virtual void Start()
{
buttonEventDataList.Add(new ViveColliderButtonEventData(this, m_buttonTrigger, ColliderButtonEventData.InputButton.Trigger));
buttonEventDataList.Add(new ViveColliderButtonEventData(this, m_buttonPadOrStick, ColliderButtonEventData.InputButton.PadOrStick));
buttonEventDataList.Add(new ViveColliderButtonEventData(this, m_buttonFunctionKey, ColliderButtonEventData.InputButton.FunctionKey));
buttonEventDataList.Add(new ViveColliderButtonEventData(this, m_buttonGripOrHandTrigger, ColliderButtonEventData.InputButton.GripOrHandTrigger));
FilterOutAssignedButton();
var eventBtn = ColliderButtonEventData.InputButton.GripOrHandTrigger + 1;
var addBtns = m_additionalButtons;
for (ControllerButton btn = 0; addBtns > 0u; ++btn, addBtns >>= 1)
{
if ((addBtns & 1u) == 0u) { continue; }
buttonEventDataList.Add(new ViveColliderButtonEventData(this, btn, eventBtn++));
}
axisEventDataList.Add(new ViveColliderPadAxisEventData(this));
axisEventDataList.Add(new ViveColliderTriggerAxisEventData(this));
}
}
}