SteamInput でゲームパッド対応した際の発展系として、コントローラのボタンの画像(グリフ)をAPIで取得できる。
このとき取得するボタンは アクション 単位での取得になるため、
「"ジャンプ" アクションのボタン画像を取得」というコードを書けば、コントローラの種類や割り当てられているボタンの種類を気にすることなく、"ジャンプ" ボタンに割り当てられている画像を取得できる。
・Xboxコントローラ
・PS4コントローラ
上記二枚の画像は同じコードでの実行結果。
何のコントローラが接続されているかは気にする必要がない。
SteamInput に対応する
過去記事参照
アクションハンドラを取得する
vdfファイルに定義したアクションのうち、取得したいアクションのハンドラを取得する。
// コントローラのハンドラを取得 InputHandle_t[] controllerHandles; int controllerCount = SteamInput.GetConnectedControllers( controllerHandles ); if (controllerCount > 0) { // とりあえず0番目使っとけ的なアレ InputHandle_t ControllerHandler = controllerHandles[0]; // アクションセットハンドラを取得 InputActionSetHandle_t ActionSetHandle = SteamInput.GetActionSetHandle("アクションセット名"); // Jumpアクションのハンドラを取得 string action ="Jump"; // 対象アクション名 InputDigitalActionHandle_t ActionHandle = SteamInput.GetDigitalActionHandle(action);
グリフファイルへのパスを取得する
ボタン画像ファイルはPCの中に保存されているので、そこへのパスを取得する。
EInputActionOrigin[] origins = new EInputActionOrigin[ Constants.STEAM_CONTROLLER_MAX_ORIGINS ]; int count =SteamInput.GetDigitalActionOrigins(ControllerHandler, ActionSetHandle, ActionHandle, origins); if (count > 0) { // とりあえず0番目とっとけ的なアレ string actionGlyphPath = SteamInput.GetGlyphForActionOrigin(origins[0]);
画像を取得してスプライトに変換する
下記Quiitaにすばらしくまとまっています。2年以上前の記事ですが普通にうごきました。