設定画面に「操作」タブを作りたい。ジャンプをSpaceからEに変えられるようにしたい。ところが、いざ調べ始めると、Input Mapping Contextはアセットなので実行中に書き換えるのは筋が悪いと分かります。
Enhanced Inputには、この用途のための仕組みが別に用意されています。 Player Mappable Key Settings で「変更してよい割り当て」に印を付け、 Enhanced Input User Settings がプレイヤーごとの上書きを保持する、という二段構えです。この記事では、その仕組みと、ジャンプのキーを画面から変更して再起動しても残る設定画面の作り方を解説します。
この記事でわかること
- なぜEnhanced Inputだと キー割り当てを後から変えられる のか
- Player Mappable Key Settings で「変更してよい割り当て」に名前を付ける
- Enhanced Input User Settings (UE5.3以降)が上書きと保存を担当する
- 押されたキーを受け取るのは Input Key Selector ウィジェットが最短
- 実践: ジャンプのキーを画面から変更し、再起動しても保持される
なぜ後から変えられるのか
キーコンフィグが現実的に作れるかどうかは、入力システムの構造で決まります。
旧来の入力システムでは、Blueprintのイベントがキーそのものに結びついていました。「Spaceキーが押された」というイベントを直接受けていたため、割り当てを変えるにはイベントノードごと差し替えるしかありません。
Enhanced Inputでは、Input ActionとInput Mapping Contextの記事で扱ったとおり、 「やりたいこと」と「どのキーか」が別々のアセットに分かれています 。Blueprintが受けているのは IA_Jump であって、Spaceキーではありません。

つまり、キー配置を変えても Blueprint側は1ノードも変わりません 。差し替わるのは、IAとキーを結んでいる線だけです。
ただし、IMCそのものを実行中に書き換えるのは避けてください。IMCはプロジェクトに含まれるア セットで、パッケージ後は読み取り専用として扱われます。代わりに、 IMCの上に「プレイヤーごとの上書き」を1枚かぶせる 仕組みが用意されています。それがこの記事の主題です。
| 層 | 中身 | 誰が決めるか |
|---|---|---|
| Input Action | やりたいこと(IA_Jump) | 開発者 |
| Input Mapping Context | 既定のキー割り当て(Space) | 開発者 |
| User Settings(上書き) | プレイヤーが変えたキー(E) | プレイヤー |
変更してよい割り当てに名前を付ける
すべての割り当てを変更可能にする必要はありません。移動やジャンプは変えられてよくても、UIの決定やキャンセルまで自由にすると詰みます。そこでUEは、 1行ずつ「これは変更してよい」と印を付ける 方式を取っています。
印の正体は Mapping Name です。上書きの仕組みは「どのIAか」ではなく、この名前を見て割り当てを差し替えます。
手順は次のとおりです。
IMC_PlayerControlsを開く- 変更を許したいキー行(
IA_Jump+Space Bar)の 三角形を開く Player Mappable Key Settingsの項目で、クラスにPlayer Mappable Key Settingsを選ぶ- 展開された
Nameに、一意な名前を入れる(例:Jump) Display Nameに、設定画面へ出す表示名を入れる(例:ジャンプ)

Name を空のままにすると、この行は上書きの対象になりません。 キーを変えるコードを書いても静かに何も起きないため、最初につまずくのはここです。名前は後述の Map Player Key にそのまま渡す識別子なので、Jump MoveForward のように分かりやすく付けてください。
注意:
Nameは プロジェクト全体で一意 にします。別のIMCで同じJumpを使うと、どちらを指しているのか分からなくなります。IMCを複数持つ場合はWalk.Jumpのように前置きを付けると衝突を避けられます。
Enhanced Input User Settingsを有効にする
Enhanced Input User Settings は、UE5.3で追加された「プレイヤーごとの入力設定」を持つオブジェクトです。上書きしたキーの保持と、ファイルへの保存までを引き受けます。
既定では無効なので、先 に有効化します。
- Edit > Project Settings を開く
- 左の一覧から Engine > Enhanced Input を選ぶ
- User Settings の
Enable User Settingsにチェックを入れる - エディタを再起動する
再起動を挟まないと、Blueprintで Get Enhanced Input User Settings を呼んでも空が返ることがあります。設定した直後に動かないときは、まず再起動を試してください。
有効にすると、Blueprintから次の流れで扱えるようになります。

| ノード | 役割 |
|---|---|
| Get Enhanced Input User Settings | 設定オブジェクトを取り出す(Enhanced Input Local Player Subsystemから伸ばす) |
| Map Player Key | 「この名前の割り当てを、このキーに変える」を登録する |
| Apply Settings | 登録した内容を 実際の入力システムへ反映 する |
| Save Settings | 内容を ディスクへ書き出す (次回起動時に復元される) |
この3つはセットです。 どれか1つ欠けると症状が変わります。
Apply Settingsを忘れる → その場では変わらないのに、次回起動すると変わっているSave Settingsを忘れる → その場では変わるのに、再起動すると元に戻る
Map Player Key は引数を Map Player Key Args という構造体でまとめて受け取ります。ピンを右クリックして分割(Split Struct Pin)すると、中身を直接つなげます。
| メンバ | 入れるもの |
|---|---|
| Mapping Name | IMCで付けた Name (例: Jump) |
| Slot | First / Second / Third / Fourth のどれか |
| New Key | 新しく割り当てるキー |
押されたキーを受け取る
設定画面の作り方でもう1つ悩むのが、 「次に押されたキーを取る」 部分です。通常の入力イベントはIMC経由なので、割り当てのないキーは拾えません。
UMGには、この用途の専用ウィジェットがあります。 Input Key Selector です。
配置してPlayすると、ボタンのように振る舞い、クリックすると入力待ちになり、次に押されたキーを保持して待機に戻ります。ゲームパッドのボタンも同じように拾えます。

よく使うのは次の2つのイベントです。
| イベント | 出るタイミング | 使いどころ |
|---|---|---|
| On Key Selected | キーが確定したとき(Selected Key を返す) | ここで Map Player Key を呼ぶ |
| On Is Selecting Key Changed | 入力待ちに入った/抜けたとき | 「キーを押してください」の表示切り替え |
詳細パネルの Key Selection Text で入力待ち中の表示文字を、 No Key Specified Text で未設定時の文字を変えられます。 Escape Keys に Escape を入れておくと、キャンセルできるようになります。
自前で作りたい場合は、UMGウィジェットで Is Focusable をオンにし、On Key Down をオーバーライドして押されたキーを取る方法もあります。ただし修飾キーやゲームパッドの扱いを自分で書くことになるため、まずはInput Key Selectorで組むほうが早いです。
重複した割り当てをどう扱うか
Map Player Key は、 同じキーが他で使われていても、そのまま登録します 。ジャンプと攻撃の両方をEにすることも可能で、その場 合は両方が同時に発火します。
止めたいなら、自分で判定を挟みます。考え方は単純で、 設定画面に並べている項目のキーを配列として持ち、選ばれたキーが既にあるかを調べる だけです。

対応は3通りあります。ゲームの性格で選んでください。
| 方針 | 動き | 向いているゲーム |
|---|---|---|
| 拒否する | 「そのキーは使用中です」と出して変更しない | 操作数が少なく、被りが事故になるもの |
| 入れ替える | 元の持ち主のキーを、いま変更した側の旧キーにする | 操作数が多いアクション。プレイヤーの手数が最少 |
| 許す | そのまま両方に割り当てる | 意図的な同時発火を使うゲーム |
個人開発では 拒否する が一番手軽で、誤操作も防げます。表示は「変更できませんでした」ではなく、 どの操作と衝突したのかを名前で出す と親切です。ここで Display Name を入れておいた効果が出ます。
キーボードとゲームパッドを分ける
1つのMapping Nameは、 First から Fourth までの4つのSlot を持てます。同じ「ジャンプ」に対して複数のキーを登録できる、という意味です。
| Slot | よくある使い方 |
|---|---|
| First | キーボード/マウス |
| Second | ゲームパッド |
| Third / Fourth | 予備(別デバイス、サブ割り当て) |
Map Player Key の Slot を切り替えるだけなので、実装は難しくありません。設定画面を「キーボード」と「ゲームパッド」のタブに分け、それぞれのボタンから 同じMapping Nameに、違うSlotで 登録します。
IMC側も、Slotの数だけ行を用意しておく のが前提です。IA_Jump に Space Bar の行しかない状態では、ゲームパッド用の枠がそもそも存在しません。Gamepad Face Button Bottom の行を足し、そちらにも Player Mappable Key Settings を設定して、同じ Name を入れておきます。
パッドそのものの対応(スティックのDead Zone、トリガー、UIのフォーカス)は ゲームパッド対応 を先に済ませておくと、この節がそのまま活きます。
補足: 登録先のSlotが無い場合に自動で作らせる
bCreateMatchingSlotIfNeededという引数もあります。ただし挙動を追いにくくなるため、まずはIMC側に行を用意する方針をおすすめします。
実践:ジャンプのキーを変更して保存する
アクションゲーム、ホラーゲーム、パズル。ジャンルを問わず、設定画面の「操作」タブは公開するゲームにほぼ必ず載ります。ここでは、その最小構成を1つ作ります。
完成形
設定画面で「ジャンプ」の欄をクリックし、Eキーを押す。閉じてPlayすると、Spaceでは跳ばずEで跳ぶ。エディタを閉じて開き直しても、Eのまま残っています。

再現条件
Third Person テンプレート で新規プロジェクトを作り、次の状態にします。
| 種類 | 名前 | 設定 |
|---|---|---|
| Project Settings | Engine > Enhanced Input | Enable User Settings をオン → エディタ再起動 |
| Input Mapping Context | IMC_Default | テンプレート標準のもの(Content/ThirdPerson/Input) |
| IMCのキー行 | IA_Jump + Space Bar | Player Mappable Key Settings を設定。 Name = Jump 、Display Name = ジャンプ |
| Widget Blueprint | WBP_KeyConfig | 親クラス User Widget |
WBP_KeyConfig の中身 | Text(テキストブロック) | 文字は ジャンプ |
WBP_KeyConfig の中身 | KeySelector_Jump(Input Key Selector) | Is Variable をオン 。Escape Keys に Escape |
WBP_KeyConfig の中身 | Button_Close(ボタン) | 文字は 閉じる |
配置は、Horizontal Boxの中にテキストとInput Key Selectorを横に並べ、その下に閉じるボタンを置くだけで十分です。UMGの組み立て自体はUMGの記事を参照してください。
ステップ1:設定画面を出す
BP_ThirdPersonCharacter のイベントグラフで、P キーを押したら設定画面が開くようにします(設定画面の開き方そのものはポーズメニューの記事と同じ形です)。
Keyboard Event P
Pressed
→ Create Widget(Class: WBP_KeyConfig)
→ Add to Viewport
→ Get Player Controller → Set Show Mouse Cursor(true)
→ Set Input Mode UI Only(In Widget to Focus: 作ったWidget)
Set Input Mode UI Only を入れておくと、設定中にキャラクターが動きません。
ステップ2:キーの確定を受けて登録する
WBP_KeyConfig のイベントグラフで、KeySelector_Jump を選び、詳細パネルのイベント欄から On Key Selected を追加します。

On Key Selected(KeySelector_Jump)
Selected Key ──────────────────┐
→ Get Owning Player │
→ Get Enhanced Input Local Player Subsystem
→ Get Enhanced Input User Settings ← 以降このピンを使い回す
→ Map Player Key
Args(Split Struct Pin)
Mapping Name : Jump ← IMCで付けた Name と完全一致
Slot : First
New Key : ←─────────────┘(Selected Key を接続)
→ Apply Settings
→ Save Settings
Get Enhanced Input User Settings の戻り値は、Map Player Key Apply Settings Save Settings の3つすべてのTargetにつなぎます。 順番を入れ替えないでください。 反映(Apply)より先に保存(Save)すると、書き出されるのが古い内容になります。
ステップ3:確認する
Playして P を押し、ジャンプの欄をクリックしてEキーを押してください。 欄の表示が E に変わり、閉じたあとはSpaceで跳ばず、Eで跳べば成功 です。 そのままエディタを閉じて開き直し、もう一度Playして Eで跳べれば保存も効いています 。
うまくいかないときの切り分けです。
- 欄の表示は変わるのに、ゲーム内ではSpaceのまま → IMCの
Nameが空、またはBlueprintのMapping Nameと綴りが違う - その場では変わるのに、再起動で元に戻る →
Save Settingsが繋がっていない - その場では変わらないのに、再起動すると変わっている →
Apply Settingsが繋がっていない Get Enhanced Input User Settingsが何も返さない →Enable User Settingsがオフ、またはオンにした後にエディタを再起動していない- SpaceでもEでも跳べる → IMCに
Space Bar以外の行があり、そちらにNameを付けていない - 設定画面を出した瞬間にキャラが動く →
Set Input Mode UI Onlyが抜けている
ここで Eに変えたあと、もう一度Spaceに戻して みてください。同じ経路で往復できることが確認できれば、この仕組みは理解できています。
ポイントは2つです。
- 上書きはIMCではなくUser Settingsに載る: IMCのアセットは最後まで無傷のままです。「工場出荷状態に戻す」機能を作るときも、User Settings側の上書きを消せば既定のキーが戻ります
- Mapping Nameが全体の合言葉になる: IMCの
NameとBlueprintのMapping Nameが一致していなければ、エラーも警告も出ないまま何も起きません。動かないときは、まずここの綴りを疑ってください
設定した内容をタイトル画面と共有したい、他の設定項目と一緒に保存したい、という段階になったら、Save Gameの記事と組み合わせます。音量や画質はそちらに持たせ、キー割り当てはUser Settingsに任せる、という分担が扱いやすい形です。
おまけ:先に知っておくと良いこと
- 現在の割り当てをUIに読み戻す部分は、バージョン差が大きい: 起動時に「いまSpaceが割り当たっている」を表示するには、
Get Current Key Profileから現在のプロファイルを取り出して問い合わせます。ただし取得ノードの名前と引数はUE5.3から5.5の間で変わっているため、 お使いのバージョンでGet Current Key Profileから線を伸ばし、候補を確認してください 。この記事では、確実に動く経路だけを実践に載せています - キーの表示名は
Get Display Nameで取れる:Key型から伸ばすと、Space BarEのような表示用のテキストが返ります。設定画面のラベルはこれで作れます - Escapeを潰さない:
Input Key SelectorのEscape Keysを空にすると、Escapeまで割り当て候補になります。キャンセル手段が無くなるので、必ず入れておいてください - UIの操作は変更対象から外す: 決定・キャンセル・メニューを開くキーまで自由にすると、変更に失敗した瞬間に何もできなくなります。これらのキー行には
Player Mappable Key Settingsを付けないでおくのが安全です - UE5.3より前のプロジェクトでは仕組みが違う: 5.1と5.2には
Player Mappable Optionsと、Subsystem側のAdd Player Mapped Keyがありました。これらは5.3以降で非推奨になっています。古い記事を参考にするときは、対象バージョンを必ず確認してください - 反映されているか自信がないときはログを1つ:
Map Player Keyの後にPrint Stringを挿し、Selected Keyを文字列にして出すと、値が届いているかだけは切り分けられます(→ Print Stringで値を確認する)
まとめ
キーコンフィグは、3つの層を上から順に押さえると迷いません。
| やること | 触る場所 |
|---|---|
| 変更を許す割り当てを決める | IMCの Player Mappable Key Settings の Name |
| プレイヤーの上書きを持つ | Enhanced Input User Settings |
| 押されたキーを受け取る | UMGの Input Key Selector |
| 反映する | Apply Settings |
| 保存する | Save Settings |
そして、Blueprintのゲームロジックは最後まで 1ノードも変わりません 。入力を IA_Jump という名前で受けておいた ことが、そのまま設定画面の実現につながっています。
あなたのゲームで、プレイヤーに変えさせたい操作はいくつあるでしょうか。まずは1つ、名前を付けるところから始めてみてください。