htc vive 手柄手柄怎么用 手柄按键说明

查看: 1285|回复: 3
HTC VIVE 【求助】怎么获取指定的手柄的输入而不是通过左/右来获取
主题帖子积分
新手上路, 积分 17, 距离下一级还需 33 积分
新手上路, 积分 17, 距离下一级还需 33 积分
自己在做点东西,但是在获取手柄的时候只提供了基于空间位置的某个手柄,而我想获取我指定的哪一个手柄,应该怎么办?
主题帖子积分
中级会员, 积分 417, 距离下一级还需 83 积分
中级会员, 积分 417, 距离下一级还需 83 积分
您好,但若是要指定手柄,最好的区分方式就是左右手,请问您的问题是?
主题帖子积分
新手上路, 积分 17, 距离下一级还需 33 积分
新手上路, 积分 17, 距离下一级还需 33 积分
目前就是用的左右手来区分的,本来我是按下右手上的扳机来触发按钮,但是如果右手移动到左手的左边后就只能去按左手的扳机键了。。。你们不觉得你们的设定有很严重的缺陷吗?
主题帖子积分
中级会员, 积分 417, 距离下一级还需 83 积分
中级会员, 积分 417, 距离下一级还需 83 积分
抱歉让您遇到这个问题,也感谢您的建议,我们也将提供给内部人员做参考。
虚拟现实第一社区
VR资源网论坛是中国最大虚拟现实社区,有问题请联系管理员QQ:HTC Vive控制手柄怎么样?
07-10[评测]
06-15[评测]
05-11[评测]
04-24[评测]
03-09[评测]
03-02[评测]
01-09[新闻]
01-07[新闻]
01-04[评测]
12-20[评测]
HTC Vive控制手柄多少钱?
10-20[行情]
10-20[行情]
10-20[行情]
10-20[行情]
10-20[行情]
关注HTC Vive控制手柄网友还看过
使用须知 以上数据来源于互联网,与产品实际参数、价格可能存在偏差,电子产品因更新较快,真实的产品情况请直接咨询售货商家,以商家提供的数据为准。
虚拟现实VR/AR团购中热卖虚拟现实VR/AR
推荐实体店
数据读取中
高清大图推荐文章????????热门产品推荐产品???????????
,,最精彩的内容尽在泡泡网
&&Copyright &
PCPOP, All Rights Reserved 泡泡网 版权所有用户名:速度速度撒
文章数:31
访问量:21415
注册日期:
阅读量:1297
阅读量:3317
阅读量:582484
阅读量:467260
51CTO推荐博文
一、HTC VIVE手柄按键图说明650) this.width=650;" src="/blog/606/94-.png" alt="94-.png" />1 -&菜单键6 -&系统键(按下后手柄断开连接,再次按下手柄再次连接上)7 -&扳机键8 -&握持键9 -&触摸板键二、按键的监听方式& &1、按键监听方式一:(SteamVR的方式,封装了OpenVR)& (1)点击触发:通过Device.GetPressDown / GetPressUp / GetPress获取按键事件& (2)触摸触发:通过device .GetTouchDown / GetTouchUp / GetTouch获取按键事件& &2、按键监听方式二:(OpenVR的方式,偏底层)& 通过controllerState.ulButtonPressed & (SteamVR_Controller.ButtonMask.Trigger)获取按键的按下、松开两种状态650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url(&/e/u261/lang/zh-cn/images/localimage.png&) no-border:1px solid #" alt="spacer.gif" />&650) this.width=650;" src="/blog/606/09-.png" alt="" style="border:0margin:0padding:0" />或者:650) this.width=650;" src="/blog/606/97-.png" alt="" style="border:0margin:0padding:0" />注:m_State、m_PrevState分别表示:当前帧状态、前一帧状态获取按下时,触摸板的值&650) this.width=650;" src="/blog/606/90-.png" alt="" style="border:0margin:0padding:0" />获取松开时,触摸板的值(这里必须使用前一帧的状态,因为松开时,当前帧的触摸的值为0)650) this.width=650;" src="/blog/606/15-.png" alt="" style="border:0margin:0padding:0" />问题:按下时,没有获取到当前帧触摸板的值!猜测原因:获取值的Update方法在更新状态Update的方法之前执行了,更新状态的Update方法执行后,才能获取触摸板的值解决方法:如果不想修改脚本执行顺序的话,可以使用LateUpdate触摸适用于触摸板键适用于扳机键(和点按类似,只是键程更短)方式一:650) this.width=650;" src="/blog/606/09-.png" alt="" style="border:0margin:0padding:0" />方式二:650) this.width=650;" src="/blog/606/69-.png" alt="" style="border:0margin:0padding:0" />问题:触摸按下时,没有获取到当前帧触摸板的值!原因:不明,内部机制需要搞清楚解决办法:在触摸按下后的第二帧才获取到触摸板的值。&650) this.width=650;" src="/blog/606/31-.png" alt="" style="border:0margin:0padding:0" />(3)触摸板轴的获取通过以上两种方式获取的VRControllerState_t,获取触摸板的轴x = state.rAxis0.xy = state.rAxis0.y三、代码使用总结如下//检测手柄功能的脚本&这个脚本挂到手柄上(controller(right)和controller(left))上&&&&&&public&class&HTCStick&:&MonoBehaviour&{&&&&&&//手柄&&&&&&&&&&SteamVR_TrackedObject&trackdeO&&&&&&void&Awake&(&)&{&&&&&&&&&&//获取手柄上的这个组件&&&&&&&&&&&&&&trackdeObjec&=&GetComponent&SteamVR_TrackedObject&&();&&&&&&}&&&&&&//&Use&this&for&initialization&&&&&&&&&&void&Start&(&)&{&&&&&&}&&&&&&void&FixedUpdate&(&)&{&&&//获取手柄输入&&&&&&&&&&&&&&var&device&=&SteamVR_Controller.Input&((int)trackdeObjec.index);&&&&&&&&&&//以下是api中复制出来的按键列表&&&&&&&&&&&&&&/*&&&&&&&public&class&ButtonMask&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&public&const&ulong&System&=&(1ul&&&&(int)EVRButtonId.k_EButton_System);&//&reserved&&&&&&&&&&&&&&&&&&public&const&ulong&ApplicationMenu&=&(1ul&&&&(int)EVRButtonId.k_EButton_ApplicationMenu);&&&&&&&&&&&&&&&&&&public&const&ulong&Grip&=&(1ul&&&&(int)EVRButtonId.k_EButton_Grip);&&&&&&&&&&&&&&&&&&public&const&ulong&Axis0&=&(1ul&&&&(int)EVRButtonId.k_EButton_Axis0);&&&&&&&&&&&&&&&&&&public&const&ulong&Axis1&=&(1ul&&&&(int)EVRButtonId.k_EButton_Axis1);&&&&&&&&&&&&&&&&&&public&const&ulong&Axis2&=&(1ul&&&&(int)EVRButtonId.k_EButton_Axis2);&&&&&&&&&&&&&&&&&&public&const&ulong&Axis3&=&(1ul&&&&(int)EVRButtonId.k_EButton_Axis3);&&&&&&&&&&&&&&&&&&public&const&ulong&Axis4&=&(1ul&&&&(int)EVRButtonId.k_EButton_Axis4);&&&&&&&&&&&&&&&&&&public&const&ulong&Touchpad&=&(1ul&&&&(int)EVRButtonId.k_EButton_SteamVR_Touchpad);&&&&&&&&&&&&&&&&&&public&const&ulong&Trigger&=&(1ul&&&&(int)EVRButtonId.k_EButton_SteamVR_Trigger);&&&&&&&&&&&&&&}&&&&&&&&&&&&&&*/&&&&&&&&&&&&//每种按键都有GetTouch、GetTouchDown、GetTouchUp、GetPressDown、GetPress、GetPressUp&&&&&&&&&&//这里只有Trigger扳机键写了6种,其他的不再重复。&&&&&&&&&&//Trigger的Touch触发条件是扳机键没有按到底,此时不会触发press。触发press时必定触发touch。&&&&&&&&&&&&&&if&(device.GetTouch&(SteamVR_Controller.ButtonMask.Trigger))&{&&&&&&&&&&&&&&Debug.Log&("轻按了扳机键");&&&&&&&&&&&&&&//右手震动&&&&&&&&&&&&&&&&&&//拉弓类似操作应该就是按住trigger(扳机)gettouch时持续调用震动方法模拟弓弦绷紧的感觉。&&&&&&&&&&&&&&&&&&var&deviceIndex2&=&SteamVR_Controller.GetDeviceIndex&(SteamVR_Controller.DeviceRelation.Rightmost);&&&&&&&&&&&&&&device.TriggerHapticPulse&(1200);&&&&&&&&&&}&&&&&&&&&&&&if&(device.GetTouchDown&(SteamVR_Controller.ButtonMask.Trigger))&{&&&&&&&&&&&&&&Debug.Log&("轻按了扳机键");&&&&&&&&&&}&&&&&&&&&&&&if&(device.GetTouchUp&(SteamVR_Controller.ButtonMask.Trigger))&{&&&&&&&&&&&&&&Debug.Log&("松开了扳机键");&&&&&&&&&&&&&&&&//左手震动&&&&&&&&&&&&&&&&&&var&deviceIndex&=&SteamVR_Controller.GetDeviceIndex&(SteamVR_Controller.DeviceRelation.Leftmost);&&&&&&&&&&&&&&SteamVR_Controller.Input&(deviceIndex).TriggerHapticPulse&(3000);&&&&&&&&&&&&&&&&//右手震动&&&&&&&&&&&&&&&&&&var&deviceIndex1&=&SteamVR_Controller.GetDeviceIndex&(SteamVR_Controller.DeviceRelation.Rightmost);&&&&&&&&&&&&&&SteamVR_Controller.Input&(deviceIndex1).TriggerHapticPulse&(3000);&&&&&&&&&&}&&&&&&&&&&&&if&(device.GetPressDown&(SteamVR_Controller.ButtonMask.Trigger))&{&&&&&&&&&&&&&&Debug.Log&("用press按下了trigger扳机键");&&&&&&&&&&}&&&&&&&&&&if&(device.GetPress&(SteamVR_Controller.ButtonMask.Trigger))&{&&&&&&&&&&&&&&Debug.Log&("用press按了trigger扳机键");&&&&&&&&&&}&&&&&&&&&&if&(device.GetPressUp&(SteamVR_Controller.ButtonMask.Trigger))&{&&&&&&&&&&&&&&Debug.Log&("用press松开了trigger扳机键");&&&&&&&&&&}&&&&&&&&&&&&//system键&圆盘下面那个键&&&&&&&&&&&&&&&//&reserved&为Steam系统保留,用来调出Steam系统菜单&因此自己加的功能没用&&下面的打印不会出现&&&&&&&&&&&&&if&(device.GetTouchDown&(SteamVR_Controller.ButtonMask.System))&{&&&&&&&&&&&&&&Debug.Log&("按下了system系统按钮");&&&&&&&&&&}&&&&&&&&&&if&(device.GetPressDown&(SteamVR_Controller.ButtonMask.System))&{&&&&&&&&&&&&&&Debug.Log&("用press按下了系统按钮");&&&&&&&&&&}&&&&&&&&&&&&//ApplicationMenu键&带菜单标志的那个按键(在方向圆盘上面)&&&&&&&&&&&&&&//ApplicationMenu键&的Touch和Press没有区别,触发都要按下去&&&&&&&&&&if&(device.GetTouchDown&(SteamVR_Controller.ButtonMask.ApplicationMenu))&{&&&&&&&&&&&&&&Debug.Log&("按下了&ApplicationMenu菜单键");&&&&&&&&&&}&&&&&&&&&&if&(device.GetPressDown&(SteamVR_Controller.ButtonMask.ApplicationMenu))&{&&&&&&&&&&&&&&Debug.Log&("用press按下了ApplicationMenu菜单键");&&&&&&&&&&}&&&&&&&&&&&&//Grip键&手柄两侧的按键&每个手柄左右各一且功能相同,同一手柄两个键是一个键。&&&&&&&&&&&&&//Grip键&的Touch和Press没有区别,触发都要按下去&&&&&&&&&&if&(device.GetTouchDown&(SteamVR_Controller.ButtonMask.Grip))&{&&&&&&&&&&&&&&Debug.Log&("按下了&Grip");&&&&&&&&&&}&&&&&&&&&&if&(device.GetPressDown&(SteamVR_Controller.ButtonMask.Grip))&{&&&&&&&&&&&&&&Debug.Log&("用press按下了&Grip");&&&&&&&&&&}&&&&&&&&&&&&//Axis0键和Touchpad是等价的&与圆盘有关&详情看下面的TouchPad这里不再赘述&&&&&&&&&&//触摸触发&&&&&&&&&&&&&&if&(device.GetTouchDown&(SteamVR_Controller.ButtonMask.Axis0))&{&&&&&&&&&&&&&&Debug.Log&("按下了&Axis0");&&&&&&&&&&}&&&&&&&&&&//按动触发&&&&&&&&&&&&&&if&(device.GetPressDown&(SteamVR_Controller.ButtonMask.Axis0))&{&&&&&&&&&&&&&&Debug.Log&("用press按下了Axis0");&&&&&&&&&&}&&&&&&&&&&&&//Axis1键&&等价于Trigger键详情看上面的Trigger按钮&这里不再赘述&&&&&&&&&&//触摸触发&&&&&&&&&&&&&&if&(device.GetTouchDown&(SteamVR_Controller.ButtonMask.Axis1))&{&&&&&&&&&&&&&&Debug.Log&("按下了Axis1");&&&&&&&&&&}&&&&&&&&&&//按动触发&&&&&&&&&&&&&&&if&(device.GetPressDown&(SteamVR_Controller.ButtonMask.Axis1))&{&&&&&&&&&&&&&&Debug.Log&("用press按下了Axis1");&&&&&&&&&&}&&&&&&&&&&&&//Axis2键&目前未发现按键位置&&&&&&&&&&&&&&//触摸触发&&&&&&&&&&&&&&if&(device.GetTouchDown&(SteamVR_Controller.ButtonMask.Axis2))&{&&&&&&&&&&&&&&Debug.Log&("按下了&Axis2");&&&&&&&&&&}&&&&&&&&&&//按动触发&&&&&&&&&&&&&&if&(device.GetPressDown&(SteamVR_Controller.ButtonMask.Axis2))&{&&&&&&&&&&&&&&Debug.Log&("用press按下了Axis2");&&&&&&&&&&}&&&&&&&&&&&&//Axis3键&&目前未发现按键位置&&&&&&&&&&&&&&//触摸触发&&&&&&&&&&&&&&if&(device.GetTouchDown&(SteamVR_Controller.ButtonMask.Axis3))&{&&&&&&&&&&&&&&Debug.Log&("按下了Axis3");&&&&&&&&&&}&&&&&&&&&&//按动触发&&&&&&&&&&&&&&if&(device.GetPressDown&(SteamVR_Controller.ButtonMask.Axis3))&{&&&&&&&&&&&&&&Debug.Log&("用press按下了Axis3");&&&&&&&&&&}&&&&&&&&&&&&//Axis4键&&目前未发现按键位置&&&&&&&&&&&&&&//触摸触发&&&&&&&&&&&&&&if&(device.GetTouchDown&(SteamVR_Controller.ButtonMask.Axis4))&{&&&&&&&&&&&&&&Debug.Log&("按下了Axis4");&&&&&&&&&&}&&&&&&&&&&//按动触发&&&&&&&&&&&&&&if&(device.GetPressDown&(SteamVR_Controller.ButtonMask.Axis4))&{&&&&&&&&&&&&&&Debug.Log&("用press按下了Axis4");&&&&&&&&&&}&&&&&&&&&&&&//Touchpad键&圆盘交互&&&&&&&&&&&&&&//触摸触发&&&&&&&&&&&&&&if&(device.GetTouchDown&(SteamVR_Controller.ButtonMask.Touchpad))&{&&&&&&&&&&&&&&Debug.Log&("按下了&Touchpad");&&&&&&&&&&&&&&&&//方法返回一个坐标&接触圆盘位置&&&&&&&&&&&&&&&&&&Vector2&cc&=&device.GetAxis&();&&&&&&&&&&&&&&Debug.Log&(cc);&&&&&&&&&&&&&&//&例子:圆盘分成上下左右&&&&&&&&&&&&&&&&&&float&angle&=&VectorAngle&(new&Vector2&(1,&0),&cc);&&&&&&&&&&&&&&Debug.Log&(angle);&&&&&&&&&&&&&&//下&&&&&&&&&&&&&&&&&&if&(angle&&&45&&&&angle&&&135)&{&&&&&&&&&&&&&&&&&&Debug.Log&("下");&&&&&&&&&&&&&&}&&&&&&&&&&&&&&//上&&&&&&&&&&&&&&&&&&if&(angle&&&-45&&&&angle&&&-135)&{&&&&&&&&&&&&&&&&&&Debug.Log&("上");&&&&&&&&&&&&&&}&&&&&&&&&&&&&&//左&&&&&&&&&&&&&&&&&&if&((angle&&&180&&&&angle&&&135)&||&(angle&&&-135&&&&angle&&&-180))&{&&&&&&&&&&&&&&&&&&Debug.Log&("左");&&&&&&&&&&&&&&}&&&&&&&&&&&&&&//右&&&&&&&&&&&&&&&&&&if&((angle&&&0&&&&angle&&&45)&||&(angle&&&-45&&&&angle&&&0))&{&&&&&&&&&&&&&&&&&&Debug.Log&("右");&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&//按动触发&&&&&&&&&&&&&&if&(device.GetPressDown&(SteamVR_Controller.ButtonMask.Touchpad))&{&&&&&&&&&&&&&&Debug.Log&("用press按下了Touchpad");&&&&&&&&&&&&&&Vector2&cc&=&device.GetAxis&();&&&&&&&&&&&&&&Debug.Log&(cc);&&&&&&&&&&}&&&&&&}&&&&&&//&Update&is&called&once&per&frame&&&&&&&&&&void&Update&(&)&{&&&&&&&&}&&&&&&//方向圆盘最好配合这个使用&圆盘的.GetAxis()会检测返回一个二位向量,可用角度划分圆盘按键数量&&&&&&&&&&//这个函数输入两个二维向量会返回一个夹角&180&到&-180&&&&&&&&&&float&VectorAngle&(Vector2&from,&Vector2&to)&{&&&&&&&&&&float&&&&&&&&&&&Vector3&cross&=&Vector3.Cross&(from,&to);&&&&&&&&&&angle&=&Vector2.Angle&(from,&to);&&&&&&&&&&return&cross.z&&&0&?&-angle&:&&&&&&&}&&} &本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 vive手柄模型 的文章

 

随机推荐