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.

83 lines
2.2 KiB

3 years ago
 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
//首先判断手和头部之间的距离,距离到一定距离时,在头部发出一条射线,射线碰到的菜单的按钮变成hover状态
public class Menu : MonoBehaviour {
public GameObject leftHand;
public GameObject head;
public GameObject mouseIcon;
public Image mouseIcon_Image;
public Collider menuCollider;
public float y;
public UnityEvent shakeEvent;
private Button menuButton;
private RaycastHit menuMouse;
//每隔0.3秒进行一次震动长度检测,超过一定的数值便触发该事件
private Vector3 shakePoint;
private float shakeDistance;
private int shakeTimer;
// Use this for initialization
void Start () {
shakeTimer = 30;
shakeDistance = 0f;
}
// Update is called once per frame
void Update () {
lookMenu();
}
void lookMenu() {
Vector3 startRayPoint = head.transform.position - new Vector3(0f, y, 0f);
if (Physics.Raycast(startRayPoint, head.transform.forward,out menuMouse, 1)) {
//print(menuMouse.collider);
Debug.DrawRay(startRayPoint, head.transform.forward * 1f, Color.red);
if (menuMouse.collider == menuCollider)
{
mouseIcon_Image.transform.position = menuMouse.point;
//print("target on");
}else
{
//print("target lost");
}
}
//甩手方法
if (shakeTimer > 0)
{
shakeTimer -= 1;
shakeDistance = shakeDistance + Mathf.Abs(shakePoint.x - leftHand.transform.position.x) + Mathf.Abs(shakePoint.y - leftHand.transform.position.y) + Mathf.Abs(shakePoint.y - leftHand.transform.position.y);
shakePoint = leftHand.transform.position;
}
else {
shakeTimer = 30;
shakeDistance = 0f;
}
if (shakeDistance > 1.5f) {
shakeEvent.Invoke();
shakeDistance = 0f;
}
}
void clickMenu() {
}
void onPressMenu() {
}
void onReleaseMenu() {
}
public void shakeMenu() {
print("shakeEvent!!!");
}
}