強火で進め

このブログではプログラム関連の記事を中心に書いてます。

「G550 パワーシェルコントローラ+バッテリー」からの入力に対応するUnityのコード情報との対応表

「G550 パワーシェルコントローラ+バッテリー」からの入力、例えばAボタンが押された時にUnity内部ではどの値に対応しているかの情報をまとめました。

コード情報

ボタンの情報
ボタン 対応する値
A joystick button 14
B joystick button 13
X joystick button 15
Y joystick button 12
L joystick button 8
R joystick button 9
一時停止 joystick button 0
D-pad(アナログスティック)の情報

D-padの情報はアナログの値とデジタルの値が同時に発生する様です。

しかし、G550が返すアナログのデータは実際にゲームに使用するには問題が有ります。もしかすると自分が購入したものだけ発生する個体差なのかも知れませんが少なくともその様に動作するものがある程度存在すると考えた方が良いでしょう。

G550が返すアナログデータの問題点

Input.GetAxis("Horizontal") などの値を画面に表示しながら検証してみた所、3DSのコントローラと同じ感覚でスティックを倒した場合には最大値の -1 や 1 の値とは成らず -0.2〜-0.9 や 0.2〜0.9 位の値と成ります。かなり力を入れて倒すと -1 や 1 の値を返しますがアクションゲームなどでとっさの入力をする時にそれくらい力を入れるのは難しそうです。

また、押しっぱなしの状態で斜め方向に入力した時に綺麗に斜めに倒していれば -1 や 1 の値を返しますが少しでもズレていたら -0.7〜-0.9 や 0.7〜0.9 と言った値を返します。

ちなみに、 Input.GetAxisRaw() の値も同時に画面に表示して確認してみましたが Input.GetAxis() が返す値とまったく同じ値が返されていました。

この様にアナログのデータはちょっと問題が有るのでこの仕様を理解した上でプログラムを組む様にしましょう。

G550が対応しているGamepadプロファイルと違い、Extended Gamepadプロファイルの場合にはアナログスティックは leftThumbstick 、 rightThumbstick と、D-padとは別のプロパティに成っています。その為、もしかするとD-pad(dpadプロパティ)の値はデジタルで取得した場合のデータしか正しい値である事を保証していないのかも知れませんね。こちらの記事でも中の人がアナログスティックは搭載してないって話してます。しかし、説明書には「8方向のアナログDパッド」と書かれたりしてます。うーむ…

【レビュー】ゲームコントローラー「G550」は本当にiPhoneのゲームを変えるのか? ファーストインプレッションレビュー (1) G550になぜアナログスティックがないのか | マイナビニュース
http://news.mynavi.jp/articles/2013/12/12/g5502/

デジタルの値の方はアナログの値に比べ、極端に問題になる動作は無い為、基本的にはデジタルの値の方で処理した方がストレス無くプログラムを組めるでしょう。

このゲームコントローラを購入した直後に書いたエントリーiOSゲーム「Dokuro」を遊んだ時に移動がしずらかったと書きましたが原因はゲームコントローラが返す値が原因な気がします。

■アナログのデータ

スティック(D-pad) 対応する値
横方向(X-axis) X axis
縦方向(X-axis) Y axis

■デジタルのデータ

スティック(D-pad) 対応する値
joystick button 4
joystick button 6
joystick button 7
joystick button 5

Joystickの名前

Input.GetJoystickNames() で返される値はこちら

[basic,wired] joystick 1 by Gamepad

実際にプログラムで使う方法

この値を元に実際にUnityのプログラムを記述する方法については以下のエントリーを参照下さい。

Unityで開発する場合の「SUPERGAMER俺」のゲームパッド情報 - 強火で進め
http://d.hatena.ne.jp/nakamura001/20130831/1377971736

なお、 Start() のタイミングだとまだゲームコントローラを認識していないみたいなので Input.GetJoystickNames() などを使うのはこちらのUnityの公式ブログに記載されている CheckForControllers() の様な処理で接続を確認した後に実行する様にしましょう。

まとめ

「G550 パワーシェルコントローラ+バッテリー」の検証まとめ - 強火で進め
http://d.hatena.ne.jp/nakamura001/20131223/1387786449