【UE5:検証】Common Action Widgetで画像が表示されない
皆様、お疲れ様です!
今回は CommonUI の機能の1つ Common Action Widget に加えて、編集> プロジェクト設定> ゲーム - Common Input Settings の Enable Enhanced Input Support を有効にした際の検証です。
Common Action Widget で表示する画像ですが、ある条件で画像が表示されない問題があったためそれを検証していた記事になります。
UE5.5.4 で確認した内容です。
Common Action Widget とは
専用のアセットで設定したキーやボタンに対応した画像を表示するための Widget です。キーボード ⇋ ゲームパッドに操作を切り換えた時に表示する画像を変えたりできます。
利用するための準備
プラグインとプロジェクト設定
編集> プラグイン から Common UI Plugin を有効にし、プロジェクトを再起動します。
さらに、編集> プロジェクト設定> Common Input Settings の Enable Enhanced Input Support を有効し、プロジェクトを再起動します。
※ CommonUI を利用する際、プロジェクト設定の "ゲームのビューポートクラス" に[CommonGameViewportClient]を設定することが多いですが、今回の検証は画像の表示を確認するだけなのでこの設定は不要です。
Input MappingContext, Input Actionを作成
IMC_UI_InputTest
IA_MenuTest01, IA_MenuTest02, IA_MenuTest03 を作成しました。
画像を表示するために利用する
Input Mapping Context(IMC)になります。画像はそれぞれキーをマッピングしたものです。
今回は W, E, Enter の3つのキーを設定しています。
UI の作成
その後、コンテンツブラウザで右クリック> ユーザーインターフェース> ウィジェットブループリントから CommonUserWidget を選択して作成します。ここでは CUI_MenuTest としておきました。
※ User Widget(いつもの) を選んで作成しても Common Action Widget は利用できるのでこの例だとどちらでもOK。
CUI_MenuTest を開き、Vertical Box に Common Action Widget を3つ追加しました。
Common Action Widget のプロパティで Enhanced Input Action に Input Action を設定します。
今回は Common Action Widget を3つ使っているので、それぞれに IA_MenuTest01, IA_MenuTest02, IA_MenuTest03 を設定しています。
UI 側の設定はこれだけです。
表示する画像を設定する
CommonInputBaseControllerData を選択してブループリントを作成します。名前を KeyboardIcon としました。
これを開き "Input Type" を[Mouse and Keyboard]にします(デフォルトでこれになってます)
"Input Brush Data Map" の「+」を押してキーと画像を割り当てます。W, E, Enter のキーを設定していますが、IMC_UI_InputTest で設定したキーと一致させる必要があります。
キーの画像には KENNEY 氏が公開されているアイコン をお借りしています!
検証開始
いつもの IMC_Default はそのままに、後ろに IMC_UI_InputTest を Priority 0 で追加しています。
適当な場所で Create Widget から CUI_MenuTest を作成し、「Add to Viewport」しました。
検証1:期待した挙動
3つのキーが Common Action Widget によって表示されました!
やったー!なんですが次の検証を行います。
検証2:Add Mapping Context しない場合
IMC_UI_InputTest を「Add Mapping Context」しない場合は画像が表示されません。
利用する場合は「Add Mapping Context」する必要があります。
検証3:Priorityを変える
IMC_Default の Priority が高くなるように設定してプレイしてみます。
W が表示されなくなりました。
これは、IMC_Default のキャラ移動 W とかぶっているからだと思います。
先程は W が表示されていましたが、「Add Mapping Context」する際、同じ Priority が設定されている場合、後から追加した方が Priority が高くなります。
Common Action Widget に設定した Input Action は Priority の設定に影響するということが分かりました。
検証4:Consume Input はどうなる?
今は IMC_Default の方が Priority が高いので、W を利用している IA_Move を開きます。
その中の "Consume Lower Priority Enhanced Input Mappings" という設定があります。
IA_Move よりも Priority が低いキーもトリガーさせるかの設定です。
この設定を OFF にします。
また W が表示されたので Consume Input の設定に影響するということも分かりました。
まとめ
Common Action Widget で設定した Input Action を「Add Mapping Context」された IMC から探し、そこにマッピングされたキーと一致する画像を CommonInputBaseControllerData から参照して表示。
同じキーが見つかった場合は、Priority が高い IMC があると画像が表示されない。
Consume Input の影響も受けるという結果になりました。
キーコンフィグに利用できないかなと思ってここ数日検証していたんですが、画像が表示されないキーがあったので原因を探っておりました。
おわりに
連携出来るのはいいな~と思ったんですが、キーコンフィグに利用しようとすると、Prioroty や「Add Mapping Context」されてないといけないので一工夫いるかもと思いました。
なかなかややこしいですね。