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.
 
 
 
 
 

93 lines
3.5 KiB

//========= Copyright 2016-2018, HTC Corporation. All rights reserved. ===========
using HTC.UnityPlugin.Pointer3D;
using System;
using UnityEngine.EventSystems;
namespace HTC.UnityPlugin.Vive
{
public static class VivePointerEventDataExtension
{
public static bool IsViveButton(this PointerEventData eventData, HandRole hand)
{
if (eventData == null) { return false; }
if (!(eventData is VivePointerEventData)) { return false; }
return (eventData as VivePointerEventData).viveRole.IsRole(hand);
}
public static bool IsViveButtonEx<TRole>(this PointerEventData eventData, TRole role)
{
if (eventData == null) { return false; }
if (!(eventData is VivePointerEventData)) { return false; }
return (eventData as VivePointerEventData).viveRole.IsRole(role);
}
public static bool IsViveButton(this PointerEventData eventData, ControllerButton button)
{
if (eventData == null) { return false; }
if (!(eventData is VivePointerEventData)) { return false; }
var viveEvent = eventData as VivePointerEventData;
return viveEvent.viveButton == button;
}
public static bool IsViveButton(this PointerEventData eventData, HandRole hand, ControllerButton button)
{
if (eventData == null) { return false; }
if (!(eventData is VivePointerEventData)) { return false; }
var viveEvent = eventData as VivePointerEventData;
return viveEvent.viveRole.IsRole(hand) && viveEvent.viveButton == button;
}
public static bool IsViveButtonEx<TRole>(this PointerEventData eventData, TRole role, ControllerButton button)
{
if (eventData == null) { return false; }
if (!(eventData is VivePointerEventData)) { return false; }
var viveEvent = eventData as VivePointerEventData;
return viveEvent.viveRole.IsRole(role) && viveEvent.viveButton == button;
}
public static bool TryGetViveButtonEventData(this PointerEventData eventData, out VivePointerEventData viveEventData)
{
viveEventData = null;
if (eventData == null) { return false; }
if (!(eventData is VivePointerEventData)) { return false; }
viveEventData = eventData as VivePointerEventData;
return true;
}
}
// Custom PointerEventData implement for Vive controller.
public class VivePointerEventData : Pointer3DEventData
{
public ViveRaycaster viveRaycaster { get; private set; }
public ControllerButton viveButton { get; private set; }
public ViveRoleProperty viveRole { get { return viveRaycaster.viveRole; } }
public VivePointerEventData(ViveRaycaster ownerRaycaster, EventSystem eventSystem, ControllerButton viveButton, InputButton mouseButton) : base(ownerRaycaster, eventSystem)
{
this.viveRaycaster = ownerRaycaster;
this.viveButton = viveButton;
this.button = mouseButton;
}
public override bool GetPress() { return ViveInput.GetPressEx(viveRole.roleType, viveRole.roleValue, viveButton); }
public override bool GetPressDown() { return ViveInput.GetPressDownEx(viveRole.roleType, viveRole.roleValue, viveButton); }
public override bool GetPressUp() { return ViveInput.GetPressUpEx(viveRole.roleType, viveRole.roleValue, viveButton); }
}
}