Unity解説 Input Managerによるコントローラー操作
Unityで作ったゲームを市販のコントローラのデフォルトの設定で動かしたいんだ。
「JoyToKey」みたいな変換ソフトウェアで、ゲームパッドの入力値をキーボードに変更するとかじゃなくて。。。
そうですね~。
それでは、ゲームパッドの入力規格として、一般的な「Xinput」を使用したコントローラ作りを説明してみましょう。
今回のような操作を設定するためには、Unityの「Input Manager」という機能を使用します。
いちじくちゃんが使っているゲームパッドは、どこのものですか?
Logicoolの無線ゲームパッドのF710!
それでは、そのゲームパッドのボタンの対応を調べてみると以下のようになります。
【Logicool ゲームパッド F710】
ボタン名 | 名前 | 値 |
---|---|---|
上ボタン | 7th Axis | 1 |
下ボタン | 7th Axis | -1 |
左ボタン | 6th Axis | -1 |
右ボタン | 6th Axis | 1 |
上ボタン/右スティック | 5th Axis | -1 |
下ボタン/右スティック | 5th Axis | 1 |
左ボタン/右スティック | 4th Axis | -1 |
右ボタン/右スティック | 4th Axis | 1 |
上ボタン/左スティック | 2th Axis | -1 |
下ボタン/左スティック | 2th Axis | 1 |
左ボタン/左スティック | X Axis | -1 |
右ボタン/左スティック | X Axis | 1 |
Aボタン | joystick button 0 | |
Bボタン | joystick button 1 | |
Xボタン | joystick button 2 | |
Yボタン | joystick button 3 | |
L1ボタン | joystick button 4 | |
L2ボタン | 3th Axis,9th Axis | -1,1 |
R1ボタン | joystick button 5 | |
R2ボタン | 3th Axis,10th Axis | 1,1 |
スタートボタン | joystick button 7 | |
バックボタン | joystick button 6 |
何か「joystick button~」というのは何となく分かるけど、それ以外は、よく分からないね?
「Axis」?「値」?
すごい簡単に言いますと、例えば、ゲームパッドの「上ボタン」を押すと、「7th Axis」というところに「1」の値が入るんですよ。
それなので、「7th Axis」が0より大きかったら、上に行くとか、、、そういうプロブラムを書けばいいんです。
例えば、下のような感じですね。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { void Update() { var Axis7 = Input.GetAxis ("Axis 7"); if(Axis7 > 0){ var v = new Vector3(0f, 0.01f, 0f); transform.Translate(v); } }
あれ?「Axis 7」?
「7th Axis」じゃないの?
はい、ゲームパッドの「7th Axis」とUnity上で扱う名前は別物なので、ごっちゃにしないように別の名前にしてみました。
このままでは、Unityに「Axis 7」を扱うための設定が、まだ入っていないので、使えませんね。
それを設定していきましょう。
下の画面が「Input Manager」の設定画面です。
Unityの「Edit」→「Project Setting」から、表示することができます。
試しにHorizontalを開いてみると、下の様になっていますね。
「size」にある値が、今、Input Managerに設定してある設定の数になります。
これを「19」に増やして、新たな設定を加えてみましょう。
設定の一番下に「Cancel」が追加されましたね。
これを下の様に書き換えましょう。
この設定は、ゲームパッドの「7th Axis」の入力値を「Axis 7」という名前で、Unityのプログラムコードで扱う的な意味合いですね。
ここの「Name」に入力した「Axis 7」が、先ほどのプログラムの「Input.GetAxis ("Axis 7")」の箇所に繋がっていく感じです。
これでUnity側の設定も終わりです。それでは、試しに適当なcubeを作成して、先ほどのスクリプトを適用し、ゲームパッドの上ボタンを押してみましょう。
【実行結果】
おー、あがった~🙌
これは、簡単な例でしたがが、このように、Input Managerを活用していけば、多くのボタンを効率的かつ汎用的に管理していけそうですね。
【おススメ】
【参考】
お名前