キーボードの次はゲームパッドからの入力を拾ってみます。
まずPCにゲームパッドを接続しておきます。
このへんはお手持ちのものを使用して下さい。ウチにあるものを参考までに紹介しますが、一般的に入手できるもので問題ありません。(ウチのコントローラーは古すぎてレアものになってしまっているようなので…)
ちなみにウチにあるのはこれ
…ってえぇ? なんでこんな高騰してるの…? レアなの…?
(当時5~6千円、少なくとも1万超えたりはしてなかったと思うけど…)
あとはこれとか。他にもPS4のコントローラーとか接続できたりするみたいなので、そういうのでもいいかもしれません。
有線だとXboxコントローラーとかもありますね。あとセガサターンのやつとか…
セガサターンのやつはSEGA純正のUSBコントローラーだったんですよね。だから接続口以外は本物。みたいな。こっちも高騰してるな…
基本的に無線がすき。毛布にくるまってても邪魔にならないから…
ゲームパッドの入力設定
「Edit→Project Settings→Input」で、Input Managerがインスペクタのところに開きます。
実のところキーボードからの入力もここにまとめることができて、キーかゲームパッドかを意識しないでも拾うことができるようになっています。
例えばHorizontal。ひとまずすでに設定されているものを見てみると、
というのと、
という、2つの設定があります。
Typeのところが「Key or Mouse Button」と「Joystick Axis」となっているように、キーボードとジョイスティックの別々の設定ということですね。
この両方の入力をまとめて「Horizontal」として取得できる。
実際にコードを書いてみます。
まず今回動かすように、Cubeをもいっこ作成。前回のCubeControllerみたいな感じでCubeController2.csも作成。
新しく作ったCube2はわかりやすいようにちょっとずらします。
これだけだとわかりづらいから、色を変えてみます。
マテリアルの変更
ProjectでMaterialsフォルダを作成して、その下で右クリック。「Create→Material」でマテリアルが作成されます。名前を「CubeMaterial」に変更しておきます。
で、このマテリアルの色を変更します。
適当に青い感じに。
最後にそれをCube2にドロップ。
するとこんな感じに、色が変わります。
コントローラーの入力を拾う
さてCubeController2を見ていきます。今回もUpdateにコードを追加していきます。
// ゲームパッドからの入力 gameObject.transform.position = new Vector3( gameObject.transform.position.x + Input.GetAxis("Horizontal"), gameObject.transform.position.y + Input.GetAxis("Vertical"), gameObject.transform.position.z ); if ( Input.GetButton("Fire1") ) { gameObject.transform.position = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z + 0.1f); } if (Input.GetButton("Fire2")) { gameObject.transform.position = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z - 0.1f); }
Input.GetAxisおよびInput.GetButtonで、Input Managerにあった設定の文字列を指定することで、その入力が取得できます。
GetAxisは-1~1の入力値の取得、GetButtonはボタンが押されているかを判定しています。
今回はひとまずすでに設定されているものを使ったので、前回Spaceで接近、BackSpaceで離れていっていたのをFire1、Fire2に割り当てています。
コントローラーではボタン0と1(具体的にどのボタンかはコントローラー設定による)、キーボードでは左のCtrlとAltですね。あとマウスの右と左。
Input Managerを使うと、こういったように多種の入力をまとめて拾うことができます。
これをCube2につけて動かしてみると、前回のCubeとは違った動きをしているのがわかります。
前回と違うのは、上下左右の移動。
前回は「キーが押されていること」を検知して、一定数を加減算していましたが、
今回はInput.GetAxisで取得されてくる値を直接加算しています。
GetAxisでは-1~1の間で、押されている長さなどに応じて値が取得されてくるのでより自然に加速したりできます。
このあたりはゲームごとの調整もありますので、前回のように一定量を加算したほうがいいものもあるかもしれません。
参考: