ゲームパッドの入力(ジョイスティック)を取って移動する
ゲームパッドの入力(ジョイスティック)を取って移動する
Unityでゲームパッドのジョイスティックから入力を取って、オブジェクトの移動をしたいと思ったので試していました。僕の持っているパッドはHORIのEDGE 301で、xinputに対応してるので割と簡単に行けるのでは、と思っていましたが、少し時間がかかったのでメモがてら残しておこうと。
なお、環境は次の通りです。
- Unity 2020.1.2f1
ボタンの位置の設定
正直言ってここで少し迷ったんですが、結局ここ()のPicture References
のWindows図を見た通りです。
これをmacos用の図じゃないよな・・?と思いながら打ってたのが間違いで迷ってた、という話です…
次にUnityのInput Manager
(編集→プロジェクト設定)で、次図のように設定していきます。
この時、名前
の項で入力した文字列が、実際にスクリプト内でその入力を使用するためのキーになります。このほかに抑えておけばいいところは(今は)5か所で、それぞれ、
- 無効は、入力されたときに実際にそれを反映させるかどうかの、いわゆる閾値を決める。
- 反転は、キー入力を反転させるかどうか。
- タイプは、操作を受け付けるデバイスが、キーボードかマウスかジョイスティックか、という情報。
- 軸は、X軸またはY軸のいずれを使用するか、という情報。
- ジョイスティック番号は、使用するジョイスティックが何番目に接続されているものか、という情報。
といった感じ。基本的には、この辺をいじりながら調整していく。これを、X軸だけではなく、Y軸についても同様に設定しておく。
ボタンの入力を取得する
ボタン(というか正確にはジョイスティック)の入力を取得するには、GetKeyDown()やGetAxis()を使う手がある。ただし、ジョイスティックはfloat値を取得する形になるので、GetAxis()を使うことになり、こんな感じで書きます。
float hoge = Input.GetAxis("InputManagerでの「名前」");
実際書いたコードが次の通りです。
float horizontalAxis = Input.GetAxis("Horizontal"); float verticalAxis = Input.GetAxis("Vertical"); //アナログパッドのX/Y軸入力で座標を移動させる if((Input.GetAxis("Horizontal") != 0f) || (Input.GetAxis("Vertical") != 0f)) { player.transform.Translate((horizontalAxis * 0.1f), (verticalAxis * 0.1f), 0); Debug.Log("NOW Axis point is: " + horizontalAxis + " and " + verticalAxis); }
これを、Update()内で回していく形になります。これを移動させるオブジェクトにアタッチして実行すれば、動くようになります。