UnityでPS3コントローラーを使う

さっそく3日坊主となっていますが、ブログ更新です。

とりあえずこの前からチュートリアル的に作っていたシューティングゲームが参考文献の部分までは終わりました。

参考文献はこちら -> http://loumo.jp/wp/archive/20130211213013/

使用した素材はこちらから -> 画像:http://game.yu-nagi.com/index.htm

-> 音楽:http://www.senses-circuit.com


で、今まではキーボードでの操作だったのですが、さすがにそれだとプレイしづらいためコントローラーで操作することにしました。コントローラーはPS3のコントローラーを使用します。


PCとPS3コントローラーの接続については、私の開発環境であるmacは特別何かをしなくてもPS3コントローラー接続できたのでこちらの説明は省きます。

[PS3コントローラー:ボタン入力]

PS3コントローラーのボタン入力(スティックを除いた◯や△など)については、キーボードでの入力と同様にEdit -> Project setting -> Input からAxisを設定できるようです。

f:id:syony:20140629232145p:plain

Positive Button にある「joystick button 10」とあります。「joystick button 10」とはunity(macの?)にとってのボタンの呼び方です。これに割り当てられているPS3コントローラーのボタンを押すことで入力を検知できます。私の環境では以下のような割り当てでした。

unityでの呼び方 実際のPS3コンのボタン
joystick button 0 selectボタン
joystick button 1 L3(左スティック押し込み)
joystick button 2 R3(右スティック押し込み)
joystick button 3 Startボタン
joystick button 4 方向key上
joystick button 5 方向key右
joystick button 6 方向key下
joystick button 7 方向key左
joystick button 8 L2
joystick button 9 R2
joystick button 10 L1
joystick button 11 R1
joystick button 12
joystick button 13
joystick button 14 ×
joystick button 15
joystick button 16 PSボタン

これでボタンは全部だと思うので、joystick button 17以降は無いと思います。まあ、あっても意味ないけど。

ソースコードではこんな感じで使います。

        /* Bullet */
        // L1で弾を発射する
        if (Input.GetAxis("Jump") == 1) {
            /* 弾を発射する処理 */
        }

joystick button 10(PS3コントローラーでいうL1)に対応した"Jump"という名前のAxisを取得して、それが1だったら(ボタンが押されている状態が1,それ以外だと0になるもよう)弾を発射する処理を実行します。

[PS3コントローラー:スティック]

左スティックはキーボードの方向keyと同様な値がとれるようです。

f:id:syony:20140629233823p:plain

TypeのJoystick AxisでPS3コントローラーのスティックを指定、Axisで 軸を決定(この場合だとX軸なのでスティックを横に倒すと値を検知)ってな感じだと思います。これと同じくY軸に対応したAxisがありました。

f:id:syony:20140629234147p:plain

この二つでスティックを倒した際の値を取得してます。コードはこんな感じ

velocity =  new Vector3(-Input.GetAxis("Horizontal"), 0, -Input.GetAxis("Vertical")); 

ボタン入力と同様にPS3コンのスティックX軸に対応した"Horizontal"という名前のAxisから値を入手してます。ボタンの場合入力値は0 or 1でしたが、こちらは0~1の間でfloat型で変動するようです。何もしない場合は0,倒し続けると1、となります。

PS3コントローラーについてはこんなところです。

この記事の編集中にプロジェクト開いてみたら、自機の弾が自機に衝突して消えるという謎バグが発生。まだまだUnityの闇は深そうです...