【Unity】コントローラ入力の実装で使うべきはInputSystem?SteamInput API?

結論、InputSystemを使うべきだと思います。現状だとSteamInputAPIを利用するとuGUIの操作ができなくなるためです。

※開発中のゲームにSteamworksを組み込みながらこの記事を書いています。

InputSystemだけで実装するとどうなるのか

InputSystemでActionなどを適切に設定すると、InputSystemがあらゆるコントローラの入力を受け付けてくれます。
これでゲームはxboxやplaystationコントローラを組み込みでサポートされている、といえます。

SteamInput APIは実装しないためSteamworks設定にはチェックを入れません。

ストア設定ではコントローラがサポートされていることを表示できます。

ユーザはライブラリに入っているゲームからコントローラ設定を開き、Steam入力を有効にするとボタンの割り当てが可能です。

ユーザがSteam入力を有効にしてボタンの割り当てを変更した場合、ゲームには割り当て通りに偽装されたコントローラ入力が送られます。
この状態でUnityのInputDebuggerを見ると、接続しているのはPS5コントローラ(DualSense)ですがデバッガーにはxboxコントローラ(XInput)と表示されます。ネットで見かける「SteamがXInputをハイジャックしている」というコメントはこれのことです。

ユーザがSteam入力を無効にしたままの場合、ゲームには無加工のコントローラ入力が送られます。
InputDebuggerを見ると、PS5コントローラ(DualSense)と表示されます。

SteamInputの有効・無効にかかわらず、InputSystemはコントローラ入力を取得できるので問題はありません。

SteamInput APIを実装するとどうなるのか

公式ドキュメントを参照しながらIGAファイルを用意したり、コードにSteamInput.Init()やSteamInput.GetActionSetHandle()などのAPIを書いていきます。

SteamInput APIを実装するためSteamworks設定のチェックを入れます。

ユーザのゲームはSteam入力がデフォルトで有効になっており、「Aボタン:通常攻撃」「Bボタン:必殺技」などゲーム内の単語を使ってボタンを割り当てることができます。オシャレです。

ただし、コントローラ情報はAPI経由でしか取得できなくなり、ゲームにコントローラ入力が送られません。キャラクターの移動などはAPIを組み込むので動作しますが、uGUIはEventSystem・InputModuleがSteamInput APIに対応していない&入力が無いため動作しません。SteamInput APIに対応したInputModuleを実装する必要があります(大変そう)。

結論

InputSystemを使いましょう。ボタン割り当ては、ゲーム内に実装したりSteam入力機能の利用を促すのが良いと思います。

宣伝

アセットストアで便利ツールを販売しています!



この記事が気に入ったらサポートをしてみませんか?