Unity でPS4のコントローラーを使う方法

Unity入門 - Project Bonfire

追記:この記事で説明しているのは、InputManager を使った方法です。Unity 2019 あたりで導入された InputSystem を使う場合、特別な設定をしなくても DualShock4は、GamePad として認識されます。

追記2:InputSystem だと、DualShock4で、どれかのボタンを押しっぱなしの時に別のボタンやスティックを操作すると、ボタンを離した扱いになるというバグがあるかも。押しっぱなしのボタンがFalseを返すようになります。 DualSenseやXBoxコントローラーは問題なし。

追記3Action Type を Pass Through にして、Control Type を Button にしたら期待通りの動作になりました。ただしPlayerInput の Behavior を SendMessages にして、public void OnSprint(InputValue value) { isRunning = value.isPressed } で取得した場合のみ上手くいっています。Invoke Unity Event を使ったり、isRunning = playerInput.currentActionMap[“Sprint”].IsPressed();で取得したりすると追記2の状態になります。

InputSystem を使った方法は、こちらの記事に書きました。

【Unity】InputSystemを使ってキャラクターの移動を実装する【2023年版】


今回は、Play Station 4 のコントローラ DUALSHOCK4 を Windows PC にUSBで有線接続する方法についてです。

普段からPS4でも有線接続なので、Bluetooth 接続の方法は調べていません。

私は、キーボードやマウスの操作が下手なので、キーボードやマウスで遊んでいても楽しくありません。なので、何よりも先にコントローラーの設定から入ります。

DUALSHOCK 4 は、USBでPCに接続するだけで使えるようになります。なので、Unity 側で入力の設定をするだけです。

まじめに設定する方法

以下のように Project Settings を開きます。

Project Settings を開いたら Input Manager を選択します。ここの Axes に設定を書いていきます。

これは初期設定のままです。Horizontal や Fire1 など重複しているところがあります。このようにすることで同じ名前で複数の入力の設定を書くことができます。上のHorizontal はマウスの入力で、下の Horizontal は Joystick の設定です。プログラムからは Horizontal と書くことで、両方の入力を受け付けられるようになります。

設定は、Size の数を増やして個別に設定しても良いのですが、下の画像のように Duplicate Array Element で設定の複製が可能です。

私は、次のように Joystick の設定部分を書き換えて使用しています。

基本的なところは、ラベルの通りです。特徴があるところとしては次の通りです。

  • Fire_0 ~ Fire_3 が、□×〇△のボタン にしてあります。
  • Horizontal Stick-R, Vertical Stick-R は、それぞれ 3th axis と 6th axis に割り当てられていて数値が飛んでいます。
  • 十字キーは、ボタンとしてではなく Axis で割り当てられてます。
    • 英語では D-Pad というらしいので、D-Pad としています。
    • 水平、垂直で 7th axis, 8th axis が割り当てられています。
  • L2と R2 は、ボタンとして割り当てられていると同時にアナログのAxis としても割り当てられています
    • ボタンとしての入力を Fire_L2, Fire_R2 としています
    • アナログ入力としては、Trigger_L2, Trigger_R2 としています。Axis はそれぞれ 4th axis, 5th axis が割り当てられています。

設定値は、コピー元の ボタン、スティックのものを変更していません。

一応、特徴があるところだけ貼っておきます。

キャプチャはこのくらいあればいいかな。

手抜きで設定する方法

こんな面倒な設定を毎回手入力していられないので、私はいつも設定ファイルを差し替えています。動作保証はできませんので、自己責任でお願いします。

置き換えるファイルは、プロジェクトのフォルダ直下の ProjectSettings フォルダ内にあるInputManager.asset です。以下の例は Bonfire03 がプロジェクト名です。

設定済みのファイルはこれです。

これに差し替えると私と同じ設定になります。
そして重ねて言っておきます。自己責任でお願いします。

以上で、PS4のコントローラーを Unity から使えるようになったはずです。

次回の Cinemachine の説明で、FreeLook Camera を右スティックで操作できるようにします。