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)
ということはiOSのSafariでもGamepad APIから値を取れるのでは?? と思ってやってみたところ、やはり取ることができた。
iOSをiOS 16にアップグレードしてからJoy-Conを接続してこのURLにアクセスして、何らかのボタンを押すと値を取れるようになる。Joy-Conの接続は、Joy-Con側のシンクロボタン*1を押して、iOS側で 設定 > Bluetooth
から接続できる。接続後は 設定 > 一般 > ゲームコントローラ
で接続状態の確認ができる。
Gamepad APIはkeydownイベント等が送られてくるわけではなく、接続時と切断時にイベントがやってくるだけ。状態は requestAnimationFrame
等でフレームごとに監視してあげる必要がある。
書いたコードは以下のrepoに置いてある。
昔はWiiのコントローラをキーボードとして認識させるアプリとかを入れてスライドのページめくりなどをやっていたけど、いまやブラウザのAPIで値が取れるようになって便利な時代だなあと思う。
*1:ボタンの位置は 【Switch】はじめて使用するコントローラーを、無線でSwitch本体に登録したい。 を参照