あんパン

こしあん派

iOS 16のSafariではJoy-Conの情報をGamepad APIで取れる

iOS 16 Release Notesにもあるように、いくつかのBluetooth接続のゲーム用コントローラが新しくサポートされた。具体的にはJoy-Conなど。

Many additional Bluetooth and USB game controllers are supported by the Game Controller framework on macOS 13, iOS 16, and tvOS 16 and later. (82409809)

https://developer.apple.com/documentation/ios-ipados-release-notes/ios-16-release-notes#Game-Controller

ということはiOSのSafariでもGamepad APIから値を取れるのでは?? と思ってやってみたところ、やはり取ることができた。

iOSをiOS 16にアップグレードしてからJoy-Conを接続してこのURLにアクセスして、何らかのボタンを押すと値を取れるようになる。Joy-Conの接続は、Joy-Con側のシンクロボタン*1を押して、iOS側で 設定 > Bluetooth から接続できる。接続後は 設定 > 一般 > ゲームコントローラ で接続状態の確認ができる。

Bluetoothで接続してキーの状態を確認

Gamepad APIはkeydownイベント等が送られてくるわけではなく、接続時と切断時にイベントがやってくるだけ。状態は requestAnimationFrame 等でフレームごとに監視してあげる必要がある。

developer.mozilla.org

書いたコードは以下のrepoに置いてある。

github.com

昔はWiiのコントローラをキーボードとして認識させるアプリとかを入れてスライドのページめくりなどをやっていたけど、いまやブラウザのAPIで値が取れるようになって便利な時代だなあと思う。