VR Gamepad手柄
现在大部分VR搭配gamepad手柄,用户通过手持手柄可以与虚拟场景进行交互。
就如headset头盔一样,gamepad手柄也有3-DoF和6-DoF的两种类型:
- 3-DoF如daydream controller,只支持方向追踪,于是google推荐采用laser激光笔进行交互。
- 6-DoF如Oculus touch,可以进行方向和位置追踪,因此可以很好的模拟手臂的动作。
相比headset传感器输入产生的交互,gamepad还多了各种输入元件,如按钮、touchpad触控板或thumbstick手摇杆等。
于是,根据手柄输入硬件又可将gamepad事件分为三类:
- A. 传感器事件:由传感器对手柄进行物理追踪,如激光笔交互;
- B. 按钮事件:通过点击按钮产生的交互行为;
- C. 控制单元事件:由thumbstick, touchpad输入产生,如swipe滑动来翻页等。
Gamepad APIGamepad API是一个HTML5接口,让开发者可以通过js访问游戏手柄,使用Gamepad API的第一步是获取gamepad实例。
一个典型的gamepad一般都会有button按钮和axes control控制单元,而VR gamepad则是在前两者的基础上,加上对传感器的支持。
属性 | 说明 |
---|---|
id | string类型,包含手柄的标识信息。 |
connected | bool类型,反映手柄是否处于连接状态 |
buttons | 返回GampadButton 对象数组,即手柄上的所有可用按钮 |
axes | 返回double类型数组,数组元素为手柄控制元件上各轴向数值 |
pose | 返回一个GamepadPose 对象,包含手柄的方向和位置信息 |
获取headset实例需要调用navigator.getVRDisplays()
方法,同样,获取一个手柄的实例,则是调用navigator.getGamepads()
方法,它返回一个gamepads
数组。
一旦有手柄连接上,gamepads
数组将产生有效的gamepad对象,否则,只能是null。
function getGamepad(id)
const gamepads =