HTC vive开发:关于手柄按键

摘要:
再次按下手柄并再次连接)7-触发键8-按住键9-触摸板键(1)点击键监控方法I:封装的OpenVR)通过设备获取关键事件。GetPressDown/GetPressUp/GetPress键监控方法II:(SteamVR_Controller.ButtonMask.Trigger)获取键按下和释放的两种状态或:获取当前帧状态和上一帧状态时。

一、关于左右手柄的对应关系

  • 两个手柄和SteamVR_TrackedObject.EIndex是对应的,一个是EIndex.Device2,另一个是EIndex.Device3(有编号的那个)
  • 在场景中手柄先后连入,先后激活的是Controller(right)、Controller(left),并添加SteamVR_TrackedObject组件

二、手柄按键

HTC vive开发:关于手柄按键第1张

1 - 菜单键

6 - 系统键(按下后手柄断开连接,再次按下手柄再次连接上)

7 - 扳机键

8 - 握持键

9 - 触摸板键

(1)点按

按键监听方式一:(SteamVR的方式,封装了OpenVR)

通过Device.GetPressDown / GetPressUp / GetPress获取按键事件

HTC vive开发:关于手柄按键第2张

按键监听方式二:(OpenVR的方式,偏底层)

通过controllerState.ulButtonPressed & (SteamVR_Controller.ButtonMask.Trigger)获取按键的按下、松开两种状态

 HTC vive开发:关于手柄按键第3张

或者:

HTC vive开发:关于手柄按键第4张

注:m_State、m_PrevState分别表示:当前帧状态、前一帧状态

获取按下时,触摸板的值

 HTC vive开发:关于手柄按键第5张

获取松开时,触摸板的值(这里必须使用前一帧的状态,因为松开时,当前帧的触摸的值为0)

HTC vive开发:关于手柄按键第6张

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

(2)触摸

  • 适用于触摸板键
  • 适用于扳机键(和点按类似,只是键程更短)
方式一:
HTC vive开发:关于手柄按键第7张

方式二:

HTC vive开发:关于手柄按键第8张

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

(3)触摸板轴的获取

通过以上两种方式获取的VRControllerState_t,获取触摸板的轴

x = state.rAxis0.x

y = state.rAxis0.y

免责声明:文章转载自《HTC vive开发:关于手柄按键》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇latex插入编号{itemize}和{enumerate}应用系统功能分析设计方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle 修改序列步长

一、查询所有序列 # 需要用管理员执行 select * from dba_sequences where sequence_owner='用户'; 二、修改步长 # ALTER SEQUENCE 序列名 INCREMENT BY 步长; ALTER SEQUENCE test_seq INCREMENT BY 100; 三、获取下一序列值 # se...

关于三级联动或者四级联动等的一些思考

原理概述如图 1、当页面初始化时应当初始化的数据源: I级数据源、II级数据源、III级数据源、IV级数据源。。。。。。 所以在初始化I级数据源的时候,需要把II、III、IV级的数据源也初始化了 初始化II级的数据源时,需要把III、IV级的也初始化了,以次类推。。。。。。 最重要的时候在初始化页面时要把四级都初始化了,本人在此出现过错误,记录一下,提...

03[转Cognos8第四讲]权限配置(1)

1.安装Sun One(Sun Java System Directory Server)设置计算机名称,在桌面上右键单击“我的电脑”,选择“属性”,在系统属性点击“网络标识”标签,点击“属性”,更改计算机名,点击“其它”,添加“此计算机的主DNS后缀”,在此添“db”,输入完成后,点击“确定”按钮,系统提示重新启动,点击“确定”系统重新启动。双击Setu...

用句柄操作下拉框

你要获得组合框的句柄做什么呢?是要读取组合框条目的值还是进行什么操作呢?要读取值用selectedIndex读取索引值(从0开始),用selectedItem读取选项的内容(要进行类型转换),用selectedIndex.key可以获得按键值;要完成句柄的操作也有三种方式,用其一也可,但工程较大,用于Windows编程:1、用父窗口的函数: WM_DRAW...

sass揭秘之变量

全局变量和局部变量 要了解sass或less的变量,有必要先了解下js的变量定义,先来一段js的代码: var a = 1; (function(){ a = 5; })(); console.log(a);//5 上面这段代码,匿名函数里面的a因为没有使用var关键字来定义,所以当我们在函数外打印a的时候,得到的是5,改变了一开始定义的1 var...

Android studio插件安装

Android Studio安装插件的方式其实和Eclipse大同小异。废话不多说,直接上图: 区域1:你当前已经安装了的插件 区域2:在线安装 区域3:从硬盘安装,即针对你已经下载好了的插件,可通过这项选择到你下好的插件,进行安装。 还有一个Install JetBrains plugin其实和区域2是一样的,只是这边将JetBrains类型的插件放一...