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.

95 lines
3.3 KiB

3 years ago
//========= Copyright 2016-2018, HTC Corporation. All rights reserved. ===========
using UnityEngine;
using UnityEngine.EventSystems;
namespace HTC.UnityPlugin.Pointer3D
{
public static class Pointer3DEventDataExtension
{
public static Pointer3DRaycaster GetRaycaster3D(this PointerEventData eventData)
{
if (!(eventData is Pointer3DEventData)) { return null; }
var eventData3D = eventData as Pointer3DEventData;
return eventData3D.raycaster;
}
public static bool TryGetRaycaster3D(this PointerEventData eventData, out Pointer3DRaycaster raycaster)
{
raycaster = null;
if (!(eventData is Pointer3DEventData)) { return false; }
var eventData3D = eventData as Pointer3DEventData;
raycaster = eventData3D.raycaster;
return true;
}
public static TRaycaster3D GetRaycaster3D<TRaycaster3D>(this PointerEventData eventData) where TRaycaster3D : Pointer3DRaycaster
{
if (!(eventData is Pointer3DEventData)) { return null; }
var eventData3D = eventData as Pointer3DEventData;
if (!(eventData3D.raycaster is TRaycaster3D)) { return null; }
return eventData3D.raycaster as TRaycaster3D;
}
public static bool TryGetRaycaster3D<TRaycaster3D>(this PointerEventData eventData, out TRaycaster3D raycaster) where TRaycaster3D : Pointer3DRaycaster
{
raycaster = null;
if (!(eventData is Pointer3DEventData)) { return false; }
var eventData3D = eventData as Pointer3DEventData;
if (!(eventData3D.raycaster is TRaycaster3D)) { return false; }
raycaster = eventData3D.raycaster as TRaycaster3D;
return true;
}
}
public class Pointer3DEventData : PointerEventData
{
public readonly Pointer3DRaycaster raycaster;
public Vector3 position3D;
public Quaternion rotation;
public Vector3 position3DDelta;
public Quaternion rotationDelta;
public Vector3 pressPosition3D;
public Quaternion pressRotation;
public float pressDistance;
public GameObject pressEnter;
public bool pressPrecessed;
public Pointer3DEventData(Pointer3DRaycaster ownerRaycaster, EventSystem eventSystem) : base(eventSystem)
{
raycaster = ownerRaycaster;
Pointer3DInputModule.AssignPointerId(this);
}
public virtual bool GetPress() { return false; }
public virtual bool GetPressDown() { return false; }
public virtual bool GetPressUp() { return false; }
public override string ToString()
{
var str = string.Empty;
str += "eligibleForClick: " + eligibleForClick + "\n";
str += "pointerEnter: " + Pointer3DInputModule.PrintGOPath(pointerEnter) + "\n";
str += "pointerPress: " + Pointer3DInputModule.PrintGOPath(pointerPress) + "\n";
str += "lastPointerPress: " + Pointer3DInputModule.PrintGOPath(lastPress) + "\n";
str += "pressEnter: " + Pointer3DInputModule.PrintGOPath(pressEnter) + "\n";
str += "pointerDrag: " + Pointer3DInputModule.PrintGOPath(pointerDrag) + "\n";
return str;
}
}
}