3

新しい Oculus Go で、いくつかの three.js アプリをテストしています。現在、主要なブラウザで利用できるようになったと思われる GamePad API を使用するだけで、コントローラにアクセスできるかどうか疑問に思っています。

Oculus のドキュメントを見ると、Unity に付属している OVRManager や、UnReal Blueprints を介して実行できるようです。しかし、私は別の学習曲線を避けようとしているだけでなく、回避できる場合はアプリを増やしています.

VR の初心者として、ゲームパッド 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 コントローラーにアクセスすることは可能ですか? また、ボタン、軸、向き、関連するゲームパッド イベントなどのデバイス プロパティにアクセスするにはどうすればよいですか?

ありがとう。

4

1 に答える 1