Skip to main content
 首页 » 资源教程

HTC vive开发:关于手柄按键

2016年08月17日 22:49:1115720

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

  • 两个手柄和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张

或者:

HTC vive开发:关于手柄按键 资源教程 第5张

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

获取按下时,触摸板的值

HTC vive开发:关于手柄按键 资源教程 第6张

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

HTC vive开发:关于手柄按键 资源教程 第7张

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

(2)触摸

  • 适用于触摸板键

  • 适用于扳机键(和点按类似,只是键程更短)

方式一:

HTC vive开发:关于手柄按键 资源教程 第8张

方式二:

HTC vive开发:关于手柄按键 资源教程 第9张

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

HTC vive开发:关于手柄按键 资源教程 第10张


(3)触摸板轴的获取

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

x = state.rAxis0.x

y = state.rAxis0.y


评论列表暂无评论
发表评论