Posted Articles

EnhancedInput's articles. (9)

わんころのUE5勉強会 Dec/10/2025 23:00

【UE5.7】Enhanced Input新機能:Mapping Profile Overrides

皆様、お疲れ様です。

以前 X でポストした内容( https://x.com/UE5wancoro/status/1977359860283965897?s=20 )ですが、UE5.7 で登場した Enhanced Input の新機能 Mapping Profile Overrides について記事にしました。

※ Blueprint 上で色々弄って確認した結果からこういう機能かな?をまとめたものなので、正確性に欠けている可能性がございます。


Mapping Profile Overrides

この機能は UE5.7 で登場した新機能で、Input Mapping Context(以下 IMC) の中にプロファイル名と入力アクションを追加で設定し、プロファイルを切替えた時に追加で設定した方のキー入力に上書きする機能です。



この画像は IMC_Default の設定に、Mapping Profile Overrides の設定を行ったものです。

TestProfile には IA_Jump だけ、
TestProfie2 には IA_Move(WASD)だけ登録しています。

「Add Mapping Context」で IMC_Default を追加すると、通常は WASD で移動、Space でジャンプが可能になっています。

上記の画像に設定した IMC_Default の場合、プロファイルを TestProfile に切り替えるとジャンプだけ機能し、TestProfie2 に切り替えると移動だけ機能するようになります。

IMC の中で複数の入力パターンをプロファイル毎に登録が出来る機能ということになります。


設定方法

プロジェクト設定でユーザ設定を有効にする


Enhanced Input User Settings を利用するので
プロジェクト設定>Enhanced Input から「ユーザ設定を有効化」にチェックを入れます。

有効にしてないとこの後利用する「Get Enhanced Input User Settings」の戻り値が無効な値になります。


IMC で Mapping Profile Overrides を設定する


この画像は、通常の IMC の設定に

IA_Sample01:R
IA_Sample02:T

と二つのキーを登録しています。

また、IMC の中に Mapping Profile Overrides が追加されています。

今回はお試しで TestProfile という名前を手入力し、IA_Sample01 に F を登録しました。

IMC 内に、IA_Sample01 が2個ある状態です。
通常なら R の方で反応しますが、F が反応する条件を確認してみました。

Blueprint で利用する

今回は新規で作成した Player Controller の BeginPlay に画像のようなノードを繋ぎました。

まず、IMC を利用するために Add Mapping Context します。
これで、IA_Sample01(R), IA_Sample02(T) の入力を受け付けるようになります。

その後、「Create New Key Profile」というノードを使って BP 上で新しいプロファイルを作成しています。
画像は "In Args" の構造体ピンを分割しています。
(Player Mappable Key Profile Creation Args 構造体)


ここで "Profile String Identifier" に TestProfile と入力しました。

これは先程の [IMC で Mapping Profile Overrides を設定する] で出てきたものと一致させる必要があるので、間違えないようコピペが良いと思います。

更に "Set as Current Profile" にチェックを入れて、新規作成したプロファイルを即反映させるようにしました。


実行結果


この状態で R,T, F と入力すると、F だけ反応しました。

TestProfile で設定した IA_Sample01(F) が反応したということになります。

設定してない IA_Sample02(T) もトリガーされなかったので、TestProfile で登録したキーのみ反映していることが確認出来ました。


Profile String Identifier が一致しない場合


画像のように "Profile String Identifier" に Dummy という名前を指定して実行した場合、R, T の2つのキーでトリガーされました。

一致しない場合は、デフォルトで設定した方が反映されます。

余談ですが、"Set as Current Profile" を False にした場合は、すぐに指定のプロファイルを切替えない設定になります。そのため、通常の R, T で入力が反応します。

後からプロファイルを切替えたい場合は、例えば「Set Active Key Profile」を使うと切替え可能です。


Map Player Key でのキーコンフィグ設定

UE5.3 で Experimental な機能として Enhanced Input User Settings(UE5.5 で Product Ready になりました) で利用できる関数「Map Player Key」というものがあり、キーコンフィグが簡単に実現できるようになりました( 過去の記事:https://ci-en.net/creator/15980/article/1116806 )

Mapping Profile Overrides を使った設定でどうなるか確認した所、やはり名前は一意でないといけないようで、名前の指定に関しては少し工夫する必要がありそうでした。


別の IMC を用意した場合


これは IMC_2 という別の IMC を用意し、V を設定した画像です。
Mapping Profile Overrides には何も設定していません。

先程の Player Controller の BeginPlay で IMC_2 も Add Mapping Context した状態で確認すると、プロファイルの切り替えに関わらず V がトリガーされました。

Mapping Profile Overrides を設定した IMC 単位で、プロファイルに応じた切り替えが可能という結果になりました。


事前に Add / Register する必要はない

指定のプロファイル利用する時に勝手に切り替わるので、事前に「Add Mapping Context」や「Register Input Mapping Context」する必要はないようです。

設定は IMC 内で、プロファイルは Blueprint などで切替えるだけなので扱い自体は簡単そうです。


使い方の一例


IMC_Default の Mapping Profile Overrides に UIOpen というプロファイルを指定し、キーの登録は何も設定していない画像です。


「Create New Key Profile」で UIOpen というプロファイルを作成しておき、作成段階ではこのプロファイルに切り替える必要がないので "Set as Current Profile" を False にしています。

メニュー画面を開く時に「Set Active Key Profile」を使い、作成したプロファイル(UIOpen)に切替えます。

そうすると IMC_Default で設定したキャラの移動が UIOpen 用に切り替わるので、IMC 内の UIOpen 内ではキーの登録を何もしてないため移動やジャンプができなくなります。

メニュー画面を開く時にキャラクターの移動をさせないということが実現できます。

他の IMC で UI 操作中はこうしたい...などがあれば同じように UIOpen を指定してキーの登録を行えばそういう振る舞いをさせることができそうです。


個人的にデメリットに感じた所

IMC で登録するキーが複数ある場合、縦にずらっと並ぶので見にくくなりそうだなと思いました。

プロファイル毎に色を変えられるとか、Mapping Profile Overrides を設定するための専用アセットを用意して IMC ではそれを登録するだけにする...など設定しやすくなればいいなと思いました。



IMC_Default をまた例にしますが、移動キーはそのまま利用したいけど、ジャンプができないステージを作ろうと思った時、画像の TestProfile2 のように、Mapping Profile Overrides にも移動キーを再度登録し、ジャンプは登録しないという設定が必要になります。

移動する設定が2重になってしまうので、共通させたい入力はそのままにしつつオーバーライド出来れば更にいい機能になるんじゃないかという気はしました。

上記の回避策として、IMC_Move に移動だけ、IMC_Jump でジャンプだけ...など機能ごとに IMC を分けておき、IMC_Jump に対して Mapping Profile Overrides を使うということで回避できるかなと思いました。

ただし、別ける分 IMC が増えることになるので管理がしにくくなるデメリットもありそうですね。


最後に

入力自体が少ないゲームや、IMC を大量に用意しなくていい場合はあまり恩恵を感じないかもしれませんが、プロファイルを切替えるだけで複数の IMC に作用する点が個人的にいいなと思いました。


UE5.6 で登場したフィルタ機能も IMC 単位でフィルタによって入力を弾くことができるので、また利用できるオプションが増えたのは嬉しいですね。

ここまで読んで頂きありがとうございました。



▼ UE5.6 以降:フィルタ機能
https://youtu.be/I2WS9BrSiHw


▼ UE5.3 以降:Map Player Key
https://youtu.be/VuMknKvLVBo

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Jun/17/2025 19:04

【UE5.3:検証】キーコンフィグ「Map Player Key」のSlotについて

皆様、お疲れ様です!

UE5.3 で実験的な機能として登場した(UE5.5 で正式対応となりました) Enhanced Input User Settings でキーコンフィグがより扱いやすくなりました。




上記画像はキーコンフィグを行う関数「Map Player Key」の "In Args" の構造体を分割した状態です。その中のメンバ変数 Slot について検証を行いました。

この記事は UE5.3.2 を利用しています。
以降のバージョンでも同じように利用できると思いますが、仕様変更等あるかもしれないためご注意下さい。

先に結果を記載しますと「IMC で設定する Mapping Name に対して最大2つまでキーやボタンの割り当てが出来る」役割があります。


利用するための準備3つ

1. プロジェクト設定


この機能を利用するには「プロジェクト設定」>「Enhanced Input」 の中にある "ユーザー設定を有効化(実験段階)" にチェックを入れる必要があります。

UE5.3 から実装されている機能なので、それ以下のバージョンではこの項目は存在しません。


2. IMC の設定


今回の例では、IMC_Default に IA_Interact を追加し、Eキーでトリガーする設定と、"Player Mappable Key Settings" の名前を KB_Interact に設定しています。
(KB = Keyboard)

3. Register する


「Map Player Key」関数で利用するには Register する必要があるため、 Blueprint の適切な場所で「Register Input Mapping Context」を使って登録を行うか、「Add Mapping Context」の "Options" ピンを分解すると出てくる "Notify User Settings" を True にすれば Register されます。

「Map Player Key」は Register 出来ていれば利用できるため「Add Mapping Context」はしてなくても良いです。

これで準備は完了です。


「Map Player Key」の基本的な使い方


特に重要な設定は [Mapping Name] [Slot] [New Key] です。

この関数は Register された IMC の中から [Mapping Name] と一致するものを探し、見つかった場合は指定の [Slot]に割り当てたキーを [New Key] に置き換えます。

上記の画像だと IMC_Default が Register されているので、KB_Interact と一致する IA_Interact の Eキーを左クリックに置き換えるという挙動になります。この関数だけでキーコンフィグできるので非常に扱いやすくなりました。

[Slot] についてですが、基本的に First を選ぶことが多くなると思います。



例えば IA_Move を見ると、IA_Move という1つの入力アクションに対して複数のキーを設定していますが、上から順に Slot の First, Second, Third... と並んでいるわけではないようで、IMC で設定するキーはすべて First の Slot が使われているということが分かりました。


また、最大2つ(First, Second) まで利用できることがプルダウン内の説明から確認できますが、Third ~ Seventh はどう使うかは分かりませんでした(プロジェクト設定では該当しそうな項目を見つけられませんでした)


Second Slot の扱いですが、例えばインタラクトを Eキーと左クリックにしたい場合、IMC 内で各キーに名前を付けますが Eキーには KB_Interact、左クリックには KB_Interact2 のように名前を分ける必要が出てきます。(名前は一意でないといけないため重複した名前は設定できません)


IMC_Default の設定ではインタラクトに Eキーだけ設定していました。


今度は Slot を [Second] にして「Map Player Key」を利用すると、KB_Interact という名前で Eキーも左クリックも両方トリガーされるようになります。
(同じ名前で2つのキーが利用できるようになった)

ここでさらに重要な設定があり、[Create Matching Slot if Needed] を True にすることで、Second Slot がまだ作成されてない場合は作成し、Second Slot に新しいキーを割り当ててくれるようです。

KB_Interact という名前に対し、First が Eキー(IMCで設定したキー)、Second が「Map Player Key」の左クリックが割り当てられたということになります。

更に追加で「Map Player Key」を呼び、Slot は Second, New Key を Yキーにすると Second Slot は既に作成されているため、左クリックが Yキーに置き換わるという挙動になります。


「Apply Settings」「Save Settings」で適用、セーブが可能


「Map Player Key」で設定を変更してもセーブしないと変更箇所はなくなってしまうため、「Apply Settings」でゲーム中に適用、「Save Settings」でセーブすることができます。

「Save Settings」を呼べば設定が保存され、次回ゲーム起動時に勝手にロードしてくれるので大変便利です。

また、「Apply Settings」や「Save Settings」を呼んだタイミングを知りたい場合は、過去の記事 を参照下さい。


どういう時に役立ちそうか


2つまでキーコンフィグ可能な仕組みが欲しい場合に役立ちそうです。
キーコンフィグ可能な PC ゲームは最大2つまで設定できるゲームが多い印象です。


軽い紹介程度ですが、Input Key Selector が2つ並んでおり、それぞれ First, Second という Slot を指定し、中身の「Map Player Key」では [Create Matching Slot if Needed] を True にしています。

こうすることで IMC 内に余計な設定を増やすことなく Slot を追加するという実装で対応できるようになりました。

結構いい機能なのにちゃんと理解できてなかったのが勿体なかったですが大変勉強になりました。


2025-08-11追記:「Map Player Key」で追加した Second Slot の Default Key は None

※ UE5.3 での挙動なので、それ以降のバージョンでは異なっている可能性があります。

※ UE5.7 のプレビュー版で確認しましたが同じでした。UE5.7 の正式リリースで変わる可能性あり。




この画像は「Map Player Key」で Second Slot に左クリックを追加した状態で、ブループリントデバッガで「Get Player Mapping Rows」から得られるキーの割り当て情報を確認している画面です。

この画面で以下のことが分かります。

■ KB_Interact という名前で2つのキーが割り当てられている(黄色とピンクの部分)

■ First Slot は Default Key, Current Key が E キー

■ Second Slot は Default Key が None

IMC で設定したキー(First Slot)は、Default Key, Current Key が同じ Eキーで設定されますが、「Map Player Key」で追加した Second Slot は Default Key が None になっています。



キーコンフィグしたキーをリセットするための関数に「Reset Key Profile to Default」があるのですが、これを呼ぶとこちらが出荷時に設定した IMC のキー(デフォルトのキー)にリセットしてくれます。

しかし、「Map Player Key」で追加した Second Slot の Default Key が None になっているため、Current Key も None に上書きされます(Second Slot のキーだけデフォルトに戻らない)



他に方法はあるかもしれませんが、もし Second Slot も利用する場合は「Reset Key Profile to Default」を呼んだ後に「Map Player Key」に Second Slot を指定してキーを再割り当てする必要がありそうです。

キーコンフィグの仕組みを実装している時、正しくリセットされないキーを確認していたところ、Second Slot に割り当てたキーだけデフォルトに戻ってないことが分かりました。

UE5.3 以降だとどうなってるか分かりませんが、Default Key が None なのでなにかしら対策しないといけなさそうでした。

今後 IMC 内で Second Slot を追加できる仕組みが出来たり、「Map Player Key」で追加したキーも Default Key が更新されたらいいなと思いました。



いきなり暑くなりすぎですが、熱中症等お気を付けくださいませ!

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 May/22/2025 20:27

【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」されてないといけないので一工夫いるかもと思いました。

なかなかややこしいですね。

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Aug/11/2024 22:36

【UE5.3】Enhanced Input User Settingsという新しい仕組み

皆様、こんばんは!

今回は UE5.3 で登場した「Enhanced Input User Settings」についてどういうものか触れてみたという記事です。
記事内は UE5.3 で検証したあれこれをまとめたものです。

※ 分からないなりに検証したものなので間違ったことが書かれている可能性があります

● 2025-01-22:目次に関数名を表記しました
● 2025-01-23:「KeyProfile という仕組み」「Reset Key Profile to Default」「Get Mapped Keys in Row」「Get Mapping Names for Key」「Get Profile Identifer」を追加


Enhanced Input User Settings とは

Enhanced Input に加わった新しい仕組みです。主にキーコンフィグで利用する事になると思いますが以前と比べ扱いやすくなっています。


この機能は以前 Player Mappable Input Config(以降頭文字を取って PMIC) を使って操作していました。

このアセットに Input Mapping Context(IMC) を登録しておき、キーコンフィグで利用するキー情報を取得する時に使われてましたが UE5.3 で非推奨になり、代わりに「Enhanced Input User Settings」を使うよう仕様変更がありました。

それに伴い「Add Player Mappable Config」などの PMIC に関わる関数が廃止されたようです。
(AddPlayerMappableConfig has been deprecated, please use UEnhancedInputUserSettings instead. という記載が見つかりました)


Enhanced Input User Settings を利用する前に


この機能を利用するには「プロジェクト設定」>「Enhanced Input」 の中にある "ユーザー設定を有効化(実験段階)" にチェックを入れる必要があります。(この機能は執筆時点で実験段階のため今後に注意)

2024-11-29 追記:UE5.5 で正式に対応したようです!



「Enhanced Input Local Player Subsystem」から「Get Enhanced Input User Settings」を出すことで利用できますが、上記の "ユーザー設定を有効化(実験段階)" にチェックが入ってないと戻り値が無効な値になります。

「Get Enhanced Input User Settings」から "拡張入力>ユーザ設定" のカテゴリを見ると利用できる関数一覧が表示されます。


KeyProfile という仕組み

Enhanced Input User Settings を使うにあたりキープロファイルという単語が出てきます。例えばキャラの移動やカメラ、攻撃など色々なキーがゲームで使われますが、こういったキー情報をまとめてあるものがキープロファイルと呼ばれているようです。


先程の画像ですが、黄色枠の下に「デフォルトプレイヤーのマッピング可能なキープロファイルクラス」という項目があります。
ここは "EnhancedPlayerMappableKeyProfile" が指定されています。
(プルダウンをクリックしてもこれしか選べないと思います)

UE で用意されているデフォルトのキープロファイルが "EnhancedPlayerMappableKeyProfile" ということになります。

ゲーム内で適用できるキープロファイルは1つだけですが、キープロファイル自体は Gameplay Tag と紐づけることで複数作成も可能で、ゲーム内で切り替えるようなことも可能です。

通常のゲームであればほとんどの場合1つあれば問題ないため、必要なら各自で作成してくださいということだと思います。


複数のキープロファイルを利用するのはどんな時だろうと思い「キャラ毎にキーコンフィグ」とGoogleで調べてみると オーバーウォッチ2、ヴァロラントというゲームがヒットしました。

このゲームはキャラ毎にキーの割り当てが出来るようで、例えばスキルを使うボタンをキャラ毎に変えるとか、そういう使い分けが出来るようです。
(キャラ1を選択すると KeyProfileA、キャラ2を選択するとKeyProfileB に切り替える)



先程 Gameplay Tag と紐づけると記載しましたが、デフォルトの "EnhancedPlayerMappableKeyProfile" では "InputUserSettings.Profiles.Default" の Tag で紐づいてるようでした。

例えば後述の「Reset Key Profile to Default」では "Profile Id" という Gameplay Tag を引数で指定する必要があり、ここに "InputUserSettings.Profiles.Default" を指定することで、対応したキープロファイル(この場合はデフォルトのキープロファイル)のキーコンフィグをリセットすることが可能です。


大雑把にまとめると、キーコンフィグの情報を持つのにデフォルトで用意されているキープロファイル(EnhancedPlayerMappableKeyProfile)があって、それが "InputUserSettings.Profiles.Default" という Gameplay Tag と紐づいている。
上記のようなゲームでない限りプロファイルは1つでいいのでデフォルトのまま使えば問題ないということになりますかね。


Register Input Mapping Context で IMC を登録


「Get Enhanced Input User Settings」から引っ張り「Register Input Mapping Context」「Register Input Mapping Contexts」という二つの関数があります。

どの IMC を利用するのかを Enhanced Input User Settings に教える(登録する)関数のようです。

Contexts の複数形の方は IMC をセットで指定することが出来るのでまとめて登録する場合はこちらを利用します。



これに伴い「Add Mapping Context」「Remove Mapping Context」で利用されている Options(Modify Context Options 構造体)に若干仕様変更がされています。

Options ピンを分割(もしくは Modify Context Options を作成)すると現れる "Notify User Settings" のフラグです。

これにチェックを入れておくと「Add Mapping Context」で指定した IMC を「Register Input Mapping Context」もしてくれるので少し楽が出来ます。キーコンフィグで使われる IMC ならチェックを入れておくといいと思います。

※「Add Mapping Context」時、明示的に "Notify User Settings" のフラグをチェックしておかないと自動で登録してくれないので注意

「Add Mapping Context」はしたいけどまだ登録はしなくていい場合はチェックを外しておき、必要なタイミングで「Register Input Mapping Context」を呼べば大丈夫です。


「Add Mapping Context」してなくても「Register Input Mapping Context」で登録だけすることも可能なので、Remove 状態の IMC もキーコンフィグすることが出来ます。(キーコンフィグ方法は後述の「Map Player Key」に記載しています)

キーコンフィグ後に「Add Mapping Context」すると置き換えたキーが反映していたので結構柔軟に対応できるなという印象でした。



「Remove Mapping Context」も同じで Options ピンを分割すると "Notify User Settings" のフラグがあります。
このフラグにチェックを入れておくと指定の IMC を外す(Remove)時に後述の「Unregister Input Mapping Context」してくれます。
こっちは登録解除の通知をするために使います。

※「Remove Mapping Context」時、明示的に "Notify User Settings" のフラグをチェックしておかないと自動で登録解除してくれないので注意



Unregister Input Mapping Context で登録解除


Register で登録するのに対し、Unregister は登録解除するための関数です。こちらも Register 同様単品版と複数版に分かれています。

Register されるタイミングは「Add Mapping Context」の Options ピンにて "Notify User Settings" を ON 、または「Register Input Mapping Context」を利用した時ですが、この2つの関数は登録したものを解除する時に使います。

Register する時は主にキーコンフィグで利用する IMC になると思いますが、なにかのタイミングでキーコンフィグから除外したい時に利用できそうです。

Unregister したからといってキーコンフィグの情報がデフォルトのキーにリセットされるということはありません。


「Add Mapping Context」された IMC を全て削除できる「Clear All Mappings」のように、Register された IMC を全て Unregister する関数は見当たりませんでした。


ゲーム内でキーコンフィグ可能なキーは恐らく決まってると思うので、事前に Register してるだけで十分では?と感じました。
そのため Unregister したいタイミングがイメージできなかったので、何かいい例があれば教えて欲しいです;


Register/Unregister と Add/Remove の注意点

少しややこしいですが IMC を実際の入力として利用するために用いる「Add Mapping Context」と「Remove Mapping Context」とは役割が違う点に注意です。

「Add Mapping Context」「Remove Mapping Context」の Options からは Register/Unregister するか決めれますが、「Register Input Mapping Context(s)」/「Unregister Input Mapping Context(s)」からは「Add Mapping Context」や「Remove Mapping Context」できません。


Register/Unregister 時の注意点



「Register Input Mapping Context」「Unregister Input Mapping Context」の戻り値である "Return Value" で登録/登録解除されたか調べることができます。

Register の方は、登録が初めての場合 True を返し、2回目以降(Unregister されるまで)は False を示しました。
既に登録済みなので~という見方が出来ます。

しかし Unregister の方は呼ばれる度に True を返していました。
既に登録解除されてるので~という意味で2回目以降は False を示すのかなと思ってたのでこれは予想外でした。

そんなに気にしなくてもいいかもしれませんが念のため書いておきました。

Is Mapping Context Registered で Register された IMC を確認


指定の IMC が登録されているかを調べるには「Is Mapping Context Registered」を使います。関数を見た感じ複数個調べる関数はなさそうなので1個ずつ調べる必要がありそうです。

似たようなもので「Has Mapping Context」がありますが、これも役割が違うため注意が必要です。
(こっちは「Add Mapping Context」された IMC をチェックする関数です)

IMC 内でキーコンフィグしたいキーを設定する


IMC で設定した IA_Jump を例に見てみます。
UE5.1 では "Is Player Mappable" のチェックを入れて編集していた項目が新しくなっています。
※ UE5.2 でこの仕様に変わってた気がしますが、容量の関係で UE5.2 がないため正確でない可能性あり

"Setting Behavior" を [Override Settings] に変更します。
次に "Player Mappable Key Settings" を [Player Mappable Key Settings(Experimental)] に変更することで以前のような入力画面が展開されます。

最低限 "名前" があれば良いようです。
"名前" は主に Blueprint などでアクセスします。この名前と一致したものを別のキーに置き換えるなど、このキーを見つけるための情報として利用します。
試しに 名前:KB_Jump としました。


Get Player Mapping Rows で KB_Jump を取得する


Enhanced Input の Subsystem から「Get Enhanced Input User Settings」> 「Get Current Key Profile」> 「Get Player Mapping Rows」と呼びます。

「Get Player Mapping Rows」の戻り値は Name型が Key/Key Mapping Row構造体がValueのマップです。

画像では「For Each Loop」を使って "名前" の所を全て出力しています。今回の例では KB_Jump しか出力されませんが、上記 [Player Mappable Key Settings(Experimental)] で設定したキーが他にもあれば全て出力されます。


Map Player Key を使ってキーコンフィグ


前述の「Register Input Mapping Context」で登録された IMC に対し、Name で指定した名前と一致するキーを置き換える時に利用する関数です。要するにキーコンフィグを行うメインの関数です。

「Get Enhanced Input User Settings」から引っ張り「Map Player Key」を出します(画像は "In Args" を分割して表示したものです)


Map Player Key Args構造体のメンバ変数がいくつかありますが、今回は下記三つを触っています。

"Mapping Name" にキーコンフィグする名前を指定します。
先程 IMC で指定した "名前"「KB_Jump」になります。

"New Key" に新しいキーを割り当てます。
直にマウス右クリックを指定しましたが、本来は UI と連動したキーコンフィグを想定しているはずなのでユーザが入力したキーをここに接続すれば良さそうです。このピンは Key構造体 になってます。

"Slot" は [First] を指定しました。最初に見つかったスロット(恐らく名前?)を "New Key" に置き換えます。

これでプレイするとスペースキーでのジャンプはできず、右クリックでジャンプが出来るようになります。キーコンフィグがめっちゃ簡単に扱えるようになりましたね。


気になったので "Slot" のプルダウンで選択できる [Unspecified] と [Second] を指定してそれぞれ確認してみました。

結果はメンバ変数の “Create Matching Slot if Needed" のフラグが ON か OFF で挙動が変わります。

ON の場合、スペースキーでも右クリックでもジャンプしました。
恐らく一致したスロットがなかったので新しくスロットが作成され、右クリックでも反応するようになったのだと思います。
(後述の「On Settings Changed」が発行された事も確認)

OFF の場合、一致するスロットが見つからなかったのでキーの変更は行われませんでした。
(後述の「On Settings Changed」は発行されませんでした)



「Apply Settings」と「Save Settings」で設定の適用・セーブ

もう一度プレイし直すとスペースキーでジャンプするデフォルトの挙動に戻ります。以前はユーザが入力したキー情報は SaveGameObject を使って保存したり工夫が必要でした。

...が、なんと関数が用意されました。


先程の「Map Player Key」でキーコンフィグ後、「Get Enhanced Input User Settings」>「Save Settings」を呼ぶだけです。ゲームを再起動しても新しいキーで置き換わっているのでめっちゃ楽になりました。(今までのは一体...)

画像には別の関数「Apply Settings」を載せてますが、この関数を呼ばなくても「Save Settings」だけでもセーブはできてました。
(一応「Apply Settings」を呼んでから「Save Settings」しておいた方がいいかも?)



「Apply Settings」が呼ばれると「On Settings Applied」というイベントが発行されるようなので、バインド先の処理にキーコンフィグを適用した瞬間に何か処理したい場合は利用できそうです。


「Map Player Key」を呼んでキーの変更が出来た、もしくは新しいキー(スロット)が追加された場合は「On Settings Changed」というイベントが発行されるようなので、キーを置き換えた瞬間に何か処理したい場合は利用できそうです。
例えば重複したキーがありますとかそういう事ができそうですね。

ちなみに「Save Settings」を呼んでも上記二つのイベントは発行されないようでした。


セーブファイルはどうなってる?

「Save Settings」を呼んだ時にセーブファイルが所定の場所に保存されてました。

エディタ起動:プロジェクトフォルダ/Saved/SaveGames 内
パッケージ化:実行ファイルの場所/Saved/SaveGames 内

に "EnhancedInputUserSettings.sav" というファイルが作成されるようです。


「Map Player Key」の罠

「Map Player Key」の "New Key" の指定で気をつける点があります。
元のキーが "キーボード&マウス" の場合、置き換えるキーも "キーボード&マウス" にしないと変更されないようです("ゲームパッド" なら "ゲームパッド" に)

https://twitter.com/kuriemeiku/status/1783351810759295164

九里江めいくさん、あらんさんにて色々な情報を頂けました!本当にありがとうございます!

また、あらんさんより C++ でこの問題を回避する方法を教えて頂きました!

https://twitter.com/thearan8000/status/1783444436309225570

Reset Key Profile to Default でキーコンフィグをリセット

前述の「Register Input Mapping Context」で登録された IMC に対し、「Map Player Key」を使ってキーコンフィグしたものをデフォルトにリセットすることができます。リセットが関数1つで出来るのはかなり便利です。



リセット対象はこの画像の "Profile Id" で指定したキープロファイルになりますが、"Profile Id" という引数は "Gameplay Tag 構造体(リファレンス)" となっており、"Profile Id" に何か繋がないとエラーになります。


本記事の見出しの1つ KeyProfile という仕組み でも触れしましたが、デフォルトのキープロファイルは "InputUserSettings.Profiles.Default" という Gameplay Tag に紐づいているので、デフォルトのまま利用している場合はこの画像のように繋ぐか、後述の「Get Profile Identifer」を繋ぐといいかなと思います。

Get Mapped Keys in Row で名前からキーを取得


前述の「Register Input Mapping Context」で登録された IMC に対し、"Mapping Name" に指定した名前から割り当たっているキーを取得できる関数です。戻り値は "Key 構造体の配列" となっています。

この画像では "Mapping Name" に KB_Jump を指定しているため、ジャンプに割り当てたスペースキーが取得できます。
(KB_Jump の設定は IMC 内でキーコンフィグしたいキーを設定する を参照下さい)


Get Mapping Names for Key でキーから名前を取得


前述の「Register Input Mapping Context」で登録された IMC に対し、"In Key" で指定したキーと一致する名前を取得します。

今回の例では "In Key" にスペースキーを指定しているので KB_Jump が取得できます。もし他のキーでスペースキーを指定している場合はその名前も取得できます。
(KB_Jump の設定は IMC 内でキーコンフィグしたいキーを設定する を参照下さい)


Get Profile Identifer で現在のキープロファイルIDを取得


「Enhanced Input User Settings」を有効すればデフォルトで "EnhancedPlayerMappableKeyProfile" というキープロファイルが利用可能です。

このキープロファイルには Gampley Tag が紐づいていることは KeyProfile という仕組み に記載しました。

この関数はその Gameplay Tag を取得する関数で、デフォルトの場合は「InputUserSettings.Profiles.Default」が出力されます。

もし別のキープロファイルを作った場合は、上記と別の Gameplay Tag が紐づくのでそれが取得できます。


最後に

仕様がコロコロ変わる Enhanced Input ですが、今回の機能はまだ実験段階のためまた変わる可能性があります。

やっぱり難しいですが、キーコンフィグの実装が簡単になってるのでこれは今後にも期待ですね(白目)

それではまた!

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Sep/07/2023 06:33

【UE5.3】Enhanced Input:IMC と Input Action の変更点

UE5.2 を全然触ってないまま UE5.3 がリリースされました。

そこで、Enhanced Input の Input Mapping Context と、入力アクション(Input Action)で UE5.1 から UE5.3 で変更された部分を自分で確認出来た範囲でまとめてみようと思います。

※ UE5.2 で既に変更された部分も含まれています
※ 未検証部分が含まれます
※ 気づいた点などあれば加筆・修正も予定しています



入力アクション

コンテンツブラウザで右クリック> 入力> 入力アクションで作成出来るアセットです。


変更された部分は画像で囲った部分です。

Accumulation Behavior

IMC に設定した IA_○○ に複数のキーが設定されていて、2つ以上の入力が同時に発生した場合の入力値をどうするか選択できます。

例えば IA_Move には WASD などキャラ移動に対して何個かキーが割り当たっています。

WとSキーを同時に押すと、入力値としては -1.0と1.0 が発生するので値が相殺(±0)されてその場から動かなくなりそうですが、W/S なら前方向、A/Dなら右方向へ移動します。


Unreal Engine Issues にも報告があり、仕様ではなく不具合だったようで修正されたみたいです。
Feature Request: Make WASD movement cancel out movement when you press keys in opposite directions


そして、以前の入力と今回修正されたオプションがこのプルダウンメニューから選択できるようになっています。

[Take Highest Absolute Value]
入力値の大きい値で処理されます。デフォルトではこちらが選択されており従来通りの挙動です。

[Comulative]
先程挙げた修正にて新しく追加された処理方式で、複数の入力値の合計値で処理されます。

例えば IA_Move をこのオプションに設定すると、-1.0 と 1.0 の合計値で 0.0 になり、キャラはその場から動きません。


Consume Lower Priority Enhanced Input Mappings

長い名前になりましたが、Consume Input の設定です。
以前の記事で記載しておりますのでこちらでは割愛します。

【UE5】Enhanced Input:Priority や Consume Input の検証


Consumes Action and Axis Mappings

Enhanced Input + 従来の入力イベントを併用する場合の処理方法を決定できます。

このオプションにチェックを入れるとすぐ下の "Trigger Events That Consume Legacy Keys" が設定できるようになります。


プルダウンメニューの中から、Enhanced Input のどのイベントと連動させるかを決められます。


各種入力イベントを置いて Enter キーでトリガーされるように実装して確認しました。

"Consumes Action and Axis Mappings" にチェックを入れると、Enhanced Input の入力イベントのみ実行されたことが確認できます。

従来の入力イベントと併用する場合で、Enhanced Input の処理を優先したい場合はこのオプションを利用すると良さそうです。


Legacy Input mappings and Gameplay Debug Mappings cannot "consume" Enhanced Input actions
余談ですが、Unreal Engine Issues に報告されているこちら内容は UE5.4 で修正予定のようです。
(Enhanced Input の IA_○○ の入力と、Debug Key○○ で同じキーを利用している場合両方トリガーされるという問題です)



現在 Enhanced Input の Debug版の入力イベントには Consume Input の設定がないため、画像のようなケースでも両方トリガーされます。

UE5.4 で Debug版の入力に対しても Consume Input の設定が出来ると嬉しいです。


Player Mappable Key Settings(未検証)

従来だと Input Mapping Context 内で設定していた "Player Mappable Options" が入力アクション内でも設定出来るようになりました。

IMC 側もそうですが、設定の仕方が以前と変わりました。

"Player Mappable Key Settings" を [None] から [Player Mappable Key Setteings(Experimental)] に変更すると、画像のような設定画面が展開されます。

キーコンフィグ等で利用するために設定する名前や、ゲーム内で表示する名前・カテゴリを設定できるのは以前と変わらずです。

"サポートキープロファイル" が新しく追加されていました。


[空のマップ]と書いた部分をクリックするとゲームプレイタグを設定できる画面が表示されます。

どういう使い方をするのか未検証のため分かり次第追記予定です。


Input Mapping Context

Setting Behavior

入力アクション内でも出てきた "Player Mappable Key Settings" の設定を IMC 内でどうするか選択することができます。

Inherit Settings from Action

入力アクションで設定した情報をそのまま利用します。
デフォルトでこの設定になっています。

Override Settings(未検証)


IMC 内で独自に設定できます。
同じくサポートキープロファイルについては未検証です。

Ignore Settings from Action

入力アクションで設定した情報を使用しません。


入力イベント系は頻繁に使うので Enhanced Input 系の機能は少しでも覚えていきたいです。

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

« 1 2

Search by Article Tags

Monthly Archive

Search by Exclusive Perks

Search Articles