我正在我的新Oculus Go中测试我的三个.js应用程序。我想知道是否可以只使用GamePad API访问控制器,这似乎在当今主流浏览器中都可以使用。
看看Oculus文档,它似乎可以通过Unity附带的OVRManager或UnReal蓝图来完成。但我正在努力避免另一个学习曲线,如果我能避免的话,我也会扩大我的应用程序。
作为一个VR新手,似乎最有利的方法就是通过这样做来使用Gamepad API(这还不是代码的核心,但我正在尝试用这种方法解决问题,到目前为止,当我进入VR模式时,除了破坏应用程序外,没有其他结果(:
var gamePadState = {
lastButtons: {},
lastAxes: {}
};
function onGamePad(){
Array.prototype.forEach.call( navigator.getGamepads(), function (activePad, padIndex){
if ( activePad.connected ) {
if (activePad.id.includes("Oculus Go")) {
// Process buttons and axes for the Gear VR touch panel
activePad.buttons.forEach( function ( gamepadButton, buttonIndex ){
if ( buttonIndex === 0 && gamepadButton.pressed && !lastButtons[buttonIndex]){
// Handle tap
dollyCam.translateZ( -0.01 );
}
gamePadState.lastButtons[buttonIndex] = gamepadButton.pressed;
});
activePad.axes.forEach( function (axisValue, axisIndex ) {
if (axisIndex === 0 && axisValue < 0 && lastAxes[axisIndex] >= 0 ){
// Handle swipe right
} else if (axisIndex === 0 && axisValue > 0 && lastAxes[axisIndex] <= 0) {
// Handle swipe left
} else if (axisIndex === 1 && axisValue < 0 && lastAxes[axisIndex] >= 0) {
// Handle swipe up
} else if (axisIndex === 1 && axisValue > 0 && lastAxes[axisIndex] <= 0) {
// Handle swipe down
}
gamePadState.lastAxes[axisIndex] = axisValue;
});
} else {
// This is a connected Bluetooth gamepad which you may want to support in your VR experience
}
}
});
}
在我就这个话题提出的另一个更窄的问题中,有人建议我在应用程序中创建一个Unity构建,以获得我想要的结果,这似乎既是一个额外的学习曲线,又增加了我的开销。如果必须的话,我会做的,但如果不做,我宁愿不做。
最终,我希望能够使用这样的逻辑来支持大多数"主要"控制器:
onGamePad( event ){
var gamePads = navigator.getGamepads();
if ( gamePads && gamePads.length > 0 && event.isSomeGamePadEventOfSomeSort ){
for ( var p = 0; p < gamePads.length; p ++ ){
if ( gamePads[ p ].id.includes( "Oculus Go" ) ){
// process buttons and axes for the Oculus Go Controller here
if ( event[ some property... gamePad?? ].id.includes( "Oculus Go" ) && event[ some property... gamePad?? ].button.pressed === someIndex ){
doSomething();
}
}
else if ( gamePads[ p ].id.includes( "Oculus Gear VR" ){
// Process buttons and axes for the Oculus Gear VR Controller here...
}
}
}
}
但出于测试目的,我很感激现在能让Oculus Go控制器启动。
所以。。。是否可以通过Gamepad API访问Oculus Go控制器,以及如何访问设备属性,如按钮、轴和方向以及相关的Gamepad事件?
谢谢。
当然,您可以直接使用Gamepad API,而无需求助于Unity。几个月前,我写了自己的Oculus Go控制器,它所需的代码比你想象的要少得多。由于我的代码已经在GitHub上免费提供,我不会将其复制到这个网站。