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.
 
 
 
 
 

85 lines
3.7 KiB

//========= Copyright 2016-2018, HTC Corporation. All rights reserved. ===========
using HTC.UnityPlugin.Pointer3D;
using HTC.UnityPlugin.Utility;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Serialization;
namespace HTC.UnityPlugin.Vive
{
[AddComponentMenu("HTC/VIU/UI Pointer/Vive Raycaster (VR Controller Input)", 4)]
// Customized Pointer3DRaycaster for Vive controllers.
public class ViveRaycaster : Pointer3DRaycaster, IViveRoleComponent
{
[SerializeField]
private ViveRoleProperty m_viveRole = ViveRoleProperty.New(HandRole.RightHand);
[SerializeField]
[FormerlySerializedAs("m_mouseBtnLeft")]
[CustomOrderedEnum]
private ControllerButton m_mouseButtonLeft = ControllerButton.Trigger;
[SerializeField]
[FormerlySerializedAs("m_mouseBtnMiddle")]
[CustomOrderedEnum]
private ControllerButton m_mouseButtonMiddle = ControllerButton.Grip;
[SerializeField]
[FormerlySerializedAs("m_mouseBtnRight")]
[CustomOrderedEnum]
private ControllerButton m_mouseButtonRight = ControllerButton.Pad;
[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 ControllerButton mouseButtonLeft { get { return m_mouseButtonLeft; } }
public ControllerButton mouseButtonMiddle { get { return m_mouseButtonMiddle; } }
public ControllerButton mouseButtonRight { get { return m_mouseButtonRight; } }
public uint additionalButtonMask { get { return m_additionalButtons; } }
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 override void OnValidate()
{
base.OnValidate();
FilterOutAssignedButton();
}
#endif
protected void FilterOutAssignedButton()
{
m_additionalButtons = EnumUtils.UnsetFlag(m_additionalButtons, (int)m_mouseButtonLeft);
m_additionalButtons = EnumUtils.UnsetFlag(m_additionalButtons, (int)m_mouseButtonMiddle);
m_additionalButtons = EnumUtils.UnsetFlag(m_additionalButtons, (int)m_mouseButtonRight);
}
protected override void Start()
{
base.Start();
buttonEventDataList.Add(new VivePointerEventData(this, EventSystem.current, m_mouseButtonLeft, PointerEventData.InputButton.Left));
buttonEventDataList.Add(new VivePointerEventData(this, EventSystem.current, m_mouseButtonRight, PointerEventData.InputButton.Right));
buttonEventDataList.Add(new VivePointerEventData(this, EventSystem.current, m_mouseButtonMiddle, PointerEventData.InputButton.Middle));
FilterOutAssignedButton();
var mouseBtn = PointerEventData.InputButton.Middle + 1;
var addBtns = m_additionalButtons;
for (ControllerButton btn = 0; addBtns > 0u; ++btn, addBtns >>= 1)
{
if ((addBtns & 1u) == 0u) { continue; }
buttonEventDataList.Add(new VivePointerEventData(this, EventSystem.current, btn, mouseBtn++));
}
}
public override Vector2 GetScrollDelta()
{
return ViveInput.GetScrollDelta(m_viveRole, m_scrollType, m_scrollDeltaScale);
}
}
}