どういう状況なのか
Unityのコントローラー管理アセットRewired、便利ですよね。
さて、私が開発中のゲームではマルチプラットフォーム対応のため、実行しているデバイスに合わせて画面に表示するボタンのテクスチャを切り替える処理を作っています。
RewiredのAction名に割り振られたボタンの名称を取得して、その名前であらかじめ用意したSpriteAtlasからボタンのテクスチャを取得して表示するコンポーネントを作ろうと考えました。
しかし、Rewiredの通常のヘルパークラスでは「現在接続されている」コントローラーの情報しか取得できないため、開発用PCでは特定デバイスのコントローラーの情報を取得できません。
そこでやり方を調査しました。
結論
MappingHelper.GetJoystickMapInstanceからとってきます。
string rewiredActionName = "Attack";
var guid = new Guid("3eb01142-da0e-4a86-8ae8-a15c2b1f2a04");
var joystickMap= ReInput.mapping.GetJoystickMapInstance(guid, "default", "default");
var actionElementMaps = joystickMap.GetButtonMapsWithAction(rewiredActionName);
Debug.Log(rewiredActionName + " " +actionElementMaps[0].elementIdentifierName);
こちらのスクリプトで、接続されていないコントローラー設定からアクション名でボタンの名前を引っ張ってこれるようになりました。
コントローラーのGuidで指定するところがミソで、GuidはAssets\Rewired\Internal\Data\Controllers\HardwareMaps\Joysticksの中の.assetファイルを選択して、インスペクターから「Launch Hardware Joisitck Map Edsitor」ボタンをクリックすると確認できます。
コントローラーの名称から引っ張って来れると楽だったのですが、
GUIDの他はControllerIdentifierかJoystickクラスの指定のみに対応しており、これらのクラスをランタイムでどっから取ってくるのか分からなかったためGUIDで解決しました。
以上