HTC vive开发:关于手柄按键

本文详细介绍了VR手柄与SteamVR_TrackedObject.EIndex的对应关系,并解释了不同按键的功能及监听方法。提供了两种按键监听方式,同时针对触摸板键的操作特性进行了探讨。
一、关于左右手柄的对应关系
  • 两个手柄和SteamVR_TrackedObject.EIndex是对应的,一个是EIndex.Device2,另一个是EIndex.Device3(有编号的那个)
  • 在场景中手柄先后连入,先后激活的是Controller(right)、Controller(left),并添加SteamVR_TrackedObject组件
二、手柄按键

1 - 菜单键
6 - 系统键(按下后手柄断开连接,再次按下手柄再次连接上)
7 - 扳机键
8 - 握持键
9 - 触摸板键

(1)点按
按键监听方式一:(SteamVR的方式,封装了OpenVR)
通过Device.GetPressDown / GetPressUp / GetPress获取按键事件


按键监听方式二:(OpenVR的方式,偏底层)
通过controllerState.ulButtonPressed & (SteamVR_Controller.ButtonMask.Trigger)获取按键的按下、松开两种状态

 

或者:


注:m_State、m_PrevState分别表示:当前帧状态、前一帧状态
获取按下时,触摸板的值

获取松开时,触摸板的值(这里必须使用前一帧的状态,因为松开时,当前帧的触摸的值为0)
问题:按下时,没有获取到当前帧触摸板的值!
猜测原因:获取值的Update方法在更新状态Update的方法之前执行了,更新状态的Update方法执行后,才能获取触摸板的值
解决方法:如果不想修改脚本执行顺序的话,可以使用LateUpdate

(2)触摸
  • 适用于触摸板键
  • 适用于扳机键(和点按类似,只是键程更短)
方式一:
方式二:

问题:触摸按下时,没有获取到当前帧触摸板的值!
原因:不明,内部机制需要搞清楚
解决办法:在触摸按下后的第二帧才获取到触摸板的值。




(3)触摸板轴的获取
通过以上两种方式获取的VRControllerState_t,获取触摸板的轴
x = state.rAxis0.x
y = state.rAxis0.y

### HTC Vive 手柄按键功能说明 #### 按键布局与功能描述 HTC Vive 手柄设计有多个交互区域,每个部分承担不同的操作职责: - **菜单按钮**:位于手柄顶部,用于触发特定应用内的菜单显示或返回主界面等功能[^2]。 - **Touchpad(触控板)**: - 上下左右滑动可模拟方向控制。 - 对应某些游戏中Xbox控制器的方向键或是摇杆的操作逻辑。 - 支持点击动作,在一些场景中作为确认选项的选择方式。 - **系统按钮/Steam按钮**:通常用来唤起系统的快捷菜单或者是进入Steam VR环境中的主页导航。 - **Trigger(扳机键)**:处于手握手柄时拇指自然弯曲所能触及的位置,主要用于射击类游戏中的开火指令发送,也可适用于其他类型的互动行为如抓取物体等。 - **Grip Buttons(握把键)**:分布在手柄两侧边缘处,方便玩家通过手指轻夹来进行诸如页面切换之类的辅助操控;另外也常被用作虚拟环境中拾起物品的手势识别输入源之一。 - **Touchpad 中心按下**:除了四周可以感应触摸外,中心位置还能感知到用户的按压事件,这增加了额外一层交互维度,比如实现更精准的目标选定或者特殊命令激活。 对于编程层面而言,当开发者想要检测某个具体按键的状态变化时,则可以通过调用相应的API接口完成。例如要监听“侧按”的情况,即`GrabGrip`事件的发生,代码片段如下所示[^3]: ```csharp void Update() { if (SteamVR_Input.GetState("default", "GrabGrip", SteamVR_Input_Sources.Any)) { Debug.Log("GrabPinch"); mainCanva.SetActive(true); } } ``` 此段脚本会在每次更新循环里检查是否有来自任意一只手柄上的`GrabGrip`信号传入,并据此执行后续的动作处理流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值