Доступ к Oculus Go Controller через API GamePad в браузере Oculus? - PullRequest
0 голосов
/ 08 ноября 2018

Я тестирую пару моих приложений 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 и как я могу получить доступ к свойствам устройства, таким как кнопки, оси и ориентация, и связанным событиям геймпада?

Спасибо.

1 Ответ

0 голосов
/ 28 июля 2019

Конечно, вы можете использовать API Gamepad напрямую, не обращаясь к Unity. Несколько месяцев назад я написал свой собственный контроллер Oculus Go , и он занимает гораздо меньше кода, чем вы думаете. Поскольку мой код уже свободно доступен на GitHub, я не копирую его на этот сайт.

...