推荐阅读
CSDN主页
GitHub开源地址
Unity3D插件分享
简书地址
我的个人博客
QQ群:1040082875
一、前言
HTC vive手柄各个按钮的响应事件,已实现的功能是按手柄上的原盘上下左右键移动,是平移,不是射线瞬移。这种方式在眼镜里太晕了。
二、代码
using UnityEngine; using System.Collections; public class Move : MonoBehaviour { /// /// 手柄位置 /// SteamVR_TrackedObject tracked; /// /// 玩家 /// public Transform player; /// /// 方向 /// public Transform dic; /// /// 速度 /// public float speed; void Awake() { //获取手柄控制 tracked = GetComponent(); } // Use this for initialization void Start() { } // Update is called once per frame void FixedUpdate() { var deviceright = SteamVR_Controller.Input((int)tracked.index); //按下圆盘键 if (deviceright.GetPress(SteamVR_Controller.ButtonMask.Touchpad)) { Vector2 cc = deviceright.GetAxis(); float angle = VectorAngle(new Vector2(1, 0), cc); //下 if (angle > 45 && angle < 135) { player.Translate(-dic.forward * Time.deltaTime * speed); } //上 else if (angle < -45 && angle > -135) { //Debug.Log("上"); player.Translate(dic.forward * Time.deltaTime * speed); } //左 else if ((angle < 180 && angle > 135) || (angle < -135 && angle > -180)) { //Debug.Log("左"); player.Translate(-dic.right * Time.deltaTime * speed); } //右 else if ((angle > 0 && angle < 45) || (angle > -45 && angle < 0)) { //Debug.Log("右"); player.Translate(dic.right * Time.deltaTime * speed); } } else if (deviceright.GetPressDown(SteamVR_Controller.ButtonMask.Trigger)) { Debug.Log("按下扳机键"); } else if (deviceright.GetPressDown(SteamVR_Controller.ButtonMask.Grip)) { Debug.Log("按下手柄侧键"); } else if (deviceright.GetPressDown(SteamVR_Controller.ButtonMask.ApplicationMenu)) { Debug.Log("按下手柄菜单键"); } else if (deviceright.GetPressDown(SteamVR_Controller.ButtonMask.ApplicationMenu)) { Debug.Log("按下手柄菜单键"); } } /// /// 根据在圆盘才按下的位置,返回一个角度值 /// /// /// /// float VectorAngle(Vector2 from, Vector2 to) { float angle; Vector3 cross = Vector3.Cross(from, to); angle = Vector2.Angle(from, to); return cross.z > 0 ? -angle : angle; } } ```
unity
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。