【Unity】ゲームパッド(logicool F310)でキャラクターを操作する
概要
以下の記事でUnityのキャラクターに対してキーボード操作で走る、ジャンプするなどの基本操作をできるようにしましたが、今回はこれらの操作をゲームパッドの入力で実現する方法についてメモしていきます。
環境
Windows10
Unity 2020.1.1f1
ゲームパッド:ロジクールF310
使用したゲームパッドについて
まず初めに、今回使用するゲームパッドはロジクール製のF310を使用した例になります。
logicool F310サイト
ロジクールの公式サイトの仕様にはWindows10対応との記述はありませんでしたが、問題なく使えました。コストパフォーマンスに優れたハードウェアだと思います。
Step1 : PCへのF310の接続
F310の場合、PCのUSBポートに差し込むだけでドライバがインストールされ、すぐに使用可能になります。認識しているか不安な場合は以下から確認することができます。
[コントロールパネル] > [ハードウェアとサウンド] > [デバイスとプリンタ-] > [Logicool Dual Action]で右クリック > [ゲームコントローラの設定]


注意事項
このボタンの番号はUnityにおいて認識する番号とは異なります。どういうことかというと、Input Managerでjoystick button 1 と設定するボタンが上記の1とは限りません。
Step2 : UnityのInput Managerの設定
今回は以下の実現を目指してInput Managerを設定していきます。
走る | ジョイスティックの前後 |
旋回 | ジョイスティックの左右 |
ジャンプ | Aボタン |
ダッシュ | LBボタン + ジョイスティックの前後 |
Unityの[Edit] > [Project Setting] > [Input Manager]で次のように設定します。
「走る」の設定
Verticalを次のように設定します。
Type:Joystick Axis
Axis: Y axis
Joy Num :Get Motion from all Joysticks

「旋回」の設定
Horizontalを次のように設定します。
Type:Joystick Axis
Axis: X axis
Joy Num :Get Motion from all Joysticks

「ジャンプ」の設定
Jumpを以下のように設定します。(以下の例ではJump1という名前にしていますがJumpでもJump1でも問題ありません)

「ダッシュ」の設定
以下のように設定します。

Step3 : スクリプト内での使用方法
Input Managerで設定した入力は以下のようにスクリプト内で使用できます。
ボタンの名称はInput Managerで設定した名前で認識することができます。
//Horizontalの入力
Input.GetAxisRaw("Horizontal")
//Verticalの入力
Input.GetAxisRaw("Vertical")
//Jumpの入力
Input.GetButton("Jump1")
//Sprint
Input.GetButton("Sprint")
GetButtonについては押している間ずっと認識する(trueになる)メソッドですが、押した瞬間のみを捉えたい場合はGetButtonDownを使用すると良いです。
例えばジョイスティックで前後に動きたい場合はこんな感じで書けます。
Vertical方向の移動例
v = -Input.GetAxis("Vertical");
transform.position += transform.forward * v ;
ここでわざわざvの頭にマイナスをつけている理由は 何故かジョイスティックの前方向-1、後ろ方向が1にマッピングされているからです。
これはそういうもの、と割り切って、マイナスをつけて対応してます。
なお、F310とInputManagerの対応はこちらにまとめています。こちらのほうがボタンの対応は分かりやすいと思いますのでお使いください。
以上
Unityを一から学ぶのにおすすめの本はコチラ