Я тестирую пару моих приложений three.js в моем новом Oculus Go. Мне интересно, возможно ли получить доступ к контроллеру, просто используя API GamePad, который, кажется, доступен сегодня в основных браузерах.
Глядя на документацию Oculus, кажется, что это можно сделать через OVRManager, который поставляется с Unity, или через UnReal Blueprints. Но я пытаюсь избежать новой кривой обучения, а также увеличиваю количество своих приложений, если я могу избежать этого.
Как новичок в виртуальной реальности, кажется, что наиболее благоприятный способ продолжить это просто использовать API-интерфейс Gamepad, выполнив что-то вроде этого (внутренности этого кода пока не работают, но я пытаюсь получить на проблему с этим подходом, и никаких результатов, кроме как сломать приложение, когда я перехожу в режим 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.
Итак ... Возможно ли получить доступ к контроллеру Oculus Go через API-интерфейс Gamepad и как я могу получить доступ к свойствам устройства, таким как кнопки, оси и ориентация, и связанным событиям геймпада?
Спасибо.