【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入力機能の利用を促すのが良いと思います。
宣伝
アセットストアで便利ツールを販売しています!
この記事が気に入ったらサポートをしてみませんか?