simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Unity:Xbox Elite ワイヤレス コントローラーの入力を処理する

ゲームパッドを使って Unity のキャラクターを動かしたい場合に、ボタンやジョイスティックの値を C# コードで受け取って処理しますが
現実のボタンやスティックの方向と、ゲームプログラム内でのIDやfloat値との関係は調べないとわかりません。

調べた結果、次の通りでした。
直感的に参照できるようにメモメモ…( ..)φ

f:id:simplestar_tech:20171105174300j:plain

f:id:simplestar_tech:20171105201411j:plain

f:id:simplestar_tech:20171105174327j:plain

f:id:simplestar_tech:20171105174338j:plain

動作チェック用のスクリプト、シーンはこちらの無料アセットを使わせてもらいました。
https://www.assetstore.unity3d.com/jp/#!/content/43621

重要な確認操作とスクリプトコードだけ以下に示します。

Unity のメインメニューの Edit > Project Settings > Input を開きます。
Inspector を確認すると、次のように X axis → "Axis 1" という紐づけが行われています。
f:id:simplestar_tech:20171105175953j:plain

あとは、文字列 "Axis 1" で次のようにジョイスティックの値を取得します。

float xAxis = Input.GetAxis("Axis 1");

ボタンは Input 設定が無くても次のように KeyCode から押されたことを取得できます。

        if (Input.GetKey(KeyCode.JoystickButton0) == true)
            button0Value.text = "pressed";
        else
            button0Value.text = "";

ちなみに、Unity が最初から設定している Input の文字列一覧を確認したところ、次の通りでした。

Horizontal → X axis
Vertical → Y axis
Fire1 → JoystickButton0 (A ボタン)
Fire2 → JoystickButton1 (B ボタン)
Fire3 → JoystickButton2 (X ボタン)
Jump → JoystickButton3 (Y ボタン)
Submit → JoystickButton0 (A ボタン)
Cancel → → JoystickButton1 (B ボタン)

右スティックや、十字キー、左右のトリガーなどの float 入力値を処理できるようにするためには
自分で Input の設定を追加していく必要がありますね。

みなさんびっくりしたことに、Y axis には直感と反対の符号が付いていたと思います。
そこで Unity の初期設定の Vertical は、符号を反転するための Invert にチェックを入れています。
上図の符号で間違いありません。