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を設定できるようです。
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と同様な値がとれるようです。
TypeのJoystick AxisでPS3コントローラーのスティックを指定、Axisで 軸を決定(この場合だとX軸なのでスティックを横に倒すと値を検知)ってな感じだと思います。これと同じくY軸に対応したAxisがありました。
この二つでスティックを倒した際の値を取得してます。コードはこんな感じ
velocity = new Vector3(-Input.GetAxis("Horizontal"), 0, -Input.GetAxis("Vertical"));
ボタン入力と同様にPS3コンのスティックX軸に対応した"Horizontal"という名前のAxisから値を入手してます。ボタンの場合入力値は0 or 1でしたが、こちらは0~1の間でfloat型で変動するようです。何もしない場合は0,倒し続けると1、となります。
PS3コントローラーについてはこんなところです。
この記事の編集中にプロジェクト開いてみたら、自機の弾が自機に衝突して消えるという謎バグが発生。まだまだUnityの闇は深そうです...