LoginSignup
0
0

More than 3 years have passed since last update.

Unity Rewiredで接続されていないコントローラーのボタンマップ情報を取得する

Posted at

どういう状況なのか

Unityのコントローラー管理アセットRewired、便利ですよね。

さて、私が開発中のゲームではマルチプラットフォーム対応のため、実行しているデバイスに合わせて画面に表示するボタンのテクスチャを切り替える処理を作っています。

RewiredのAction名に割り振られたボタンの名称を取得して、その名前であらかじめ用意したSpriteAtlasからボタンのテクスチャを取得して表示するコンポーネントを作ろうと考えました。

しかし、Rewiredの通常のヘルパークラスでは「現在接続されている」コントローラーの情報しか取得できないため、開発用PCでは特定デバイスのコントローラーの情報を取得できません。

そこでやり方を調査しました。

結論

MappingHelper.GetJoystickMapInstanceからとってきます。

GetActionElementsInfoFromNotConnectedJoystick.cs
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で解決しました。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0