皆様、お疲れ様です。
以前 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