iOS7 対応のゲームコントローラを購入してみました。
SteelSeries Stratus ワイヤレスゲームコントローラーです。
小型ですがボタン配列は標準的なもの。
↑大きさ比較 (下が Stratus)
アナログスティックと L2/R2 が付いたタイプで、
GameController Framework からは ExtendedGamepad として認識されます。
接続は Bluetooth によるワイヤレスです。
指で画面が見えなくなってしまうこともなく、小さいながらも快適に操作できます。
左右2本のスティック (Thumbstick) はもちろんアナログ値ですが、
他のボタンも感圧式になっており、押した強さを受け取ることが可能です。
これはちょうど PS2 の DUALSHOCK2 や PS3 の SIXAXIS/DUALSHOCK3 のボタンと
同じ仕様になります。
十字キー (Directional Pad) や A/B/X/Y などの各ボタン、L1/L2/R1/R2 は
デジタルな ON/OFF と同時に API からは 0〜1.0 の値も得られます。
中央にある丸いボタンは Pause で、押した時のトリガのみ検出できます。
その上の 4 つの LED はプレイヤーの識別に用いられます。
つまり 4個のコントローラを接続したマルチプレイも考慮されているということ。
プレイヤー番号はコントローラ認識時にアプリケーションが割り当てる必要があります。
ゲームによっては認識したのに 4 つの LED が点滅したままになっている場合がありますが、
おそらくアプリが GCController の playerIndex を設定していないことが原因と思われます。
PC や Android では接続するコントローラによってボタンやスティックのマッピングが
異なっており、個別に対応したりカスタマイズ機能を設ける等の対策が必要でした。
iOS7 では仕様が決められているため、ボタン配列がずれることもなく読み出し方も一定で、非常に扱いやすくなっています。
なお Android 3.1 以降は Xbox360 USB Controller と PS3 (SIXAXIS/DUALSHOCK3)
Controller の有線 (USB) 接続に対応しています。
この両者を使う限りは、ボタンマッピングの食い違いもあまり考慮しなくて
済むようになっています。
Stratus は PC/Android でも HID としてペアリングは出来ますが、
ゲームコントローラとしては利用できませんでした。
関連エントリ
・Linux で Gamepad の値を読み込む & デバイスの判定
・Android 3.1 と GamePad のイベントの詳細 (2)
・Android 3.1 と GamePad のイベントコード