【Unreal Engine】UE5でキーコンフィグを作る:Enhanced Inputでキー割り当てを変更・保存する

作成: 2026-07-20

Enhanced Inputのキー割り当てを実行中に変更する方法を図解。Player Mappable Key Settingsで印を付け、Input Key Selectorで押されたキーを受け取り、Enhanced Input User Settingsで保存する。再起動しても残る設定画面を作る実践つき。

設定画面に「操作」タブを作りたい。ジャンプを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 ウィジェットが最短
  • 実践: ジャンプのキーを画面から変更し、再起動しても保持される

Sponsored

なぜ後から変えられるのか

キーコンフィグが現実的に作れるかどうかは、入力システムの構造で決まります。

旧来の入力システムでは、Blueprintのイベントがキーそのものに結びついていました。「Spaceキーが押された」というイベントを直接受けていたため、割り当てを変えるにはイベントノードごと差し替えるしかありません。

Enhanced Inputでは、Input ActionとInput Mapping Contextの記事で扱ったとおり、 「やりたいこと」と「どのキーか」が別々のアセットに分かれています 。Blueprintが受けているのは IA_Jump であって、Spaceキーではありません。

Blueprintは常にIA_Jumpだけを見ていて、その下のキーだけが差し替わることを示した図

つまり、キー配置を変えても Blueprint側は1ノードも変わりません 。差し替わるのは、IAとキーを結んでいる線だけです。

ただし、IMCそのものを実行中に書き換えるのは避けてください。IMCはプロジェクトに含まれるアセットで、パッケージ後は読み取り専用として扱われます。代わりに、 IMCの上に「プレイヤーごとの上書き」を1枚かぶせる 仕組みが用意されています。それがこの記事の主題です。

中身誰が決めるか
Input Actionやりたいこと(IA_Jump開発者
Input Mapping Context既定のキー割り当て(Space)開発者
User Settings(上書き)プレイヤーが変えたキー(E)プレイヤー

変更してよい割り当てに名前を付ける

すべての割り当てを変更可能にする必要はありません。移動やジャンプは変えられてよくても、UIの決定やキャンセルまで自由にすると詰みます。そこでUEは、 1行ずつ「これは変更してよい」と印を付ける 方式を取っています。

印の正体は Mapping Name です。上書きの仕組みは「どのIAか」ではなく、この名前を見て割り当てを差し替えます。

手順は次のとおりです。

  1. IMC_PlayerControls を開く
  2. 変更を許したいキー行(IA_JumpSpace Bar)の 三角形を開く
  3. Player Mappable Key Settings の項目で、クラスに Player Mappable Key Settings を選ぶ
  4. 展開された Name に、一意な名前を入れる(例: Jump
  5. Display Name に、設定画面へ出す表示名を入れる(例: ジャンプ
IMCのキー行を展開してPlayer Mappable Key Settingsを設定し、NameとDisplay Nameを入れる様子の図

Name を空のままにすると、この行は上書きの対象になりません。 キーを変えるコードを書いても静かに何も起きないため、最初につまずくのはここです。名前は後述の Map Player Key にそのまま渡す識別子なので、Jump MoveForward のように分かりやすく付けてください。

注意: Nameプロジェクト全体で一意 にします。別のIMCで同じ Jump を使うと、どちらを指しているのか分からなくなります。IMCを複数持つ場合は Walk.Jump のように前置きを付けると衝突を避けられます。

Sponsored

Enhanced Input User Settingsを有効にする

Enhanced Input User Settings は、UE5.3で追加された「プレイヤーごとの入力設定」を持つオブジェクトです。上書きしたキーの保持と、ファイルへの保存までを引き受けます。

既定では無効なので、先に有効化します。

  1. Edit > Project Settings を開く
  2. 左の一覧から Engine > Enhanced Input を選ぶ
  3. User SettingsEnable User Settings にチェックを入れる
  4. エディタを再起動する

再起動を挟まないと、Blueprintで Get Enhanced Input User Settings を呼んでも空が返ることがあります。設定した直後に動かないときは、まず再起動を試してください。

有効にすると、Blueprintから次の流れで扱えるようになります。

Get Enhanced Input User SettingsからMap Player Key、Apply Settings、Save Settingsへ流れる3段の図
ノード役割
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 NameIMCで付けた Name (例: Jump
SlotFirst / Second / Third / Fourth のどれか
New Key新しく割り当てるキー

押されたキーを受け取る

設定画面の作り方でもう1つ悩むのが、 「次に押されたキーを取る」 部分です。通常の入力イベントはIMC経由なので、割り当てのないキーは拾えません。

UMGには、この用途の専用ウィジェットがあります。 Input Key Selector です。

配置してPlayすると、ボタンのように振る舞い、クリックすると入力待ちになり、次に押されたキーを保持して待機に戻ります。ゲームパッドのボタンも同じように拾えます。

待機、入力待ち、確定の3状態を矢印でつないだInput Key Selectorの動作図

よく使うのは次の2つのイベントです。

イベント出るタイミング使いどころ
On Key Selectedキーが確定したとき(Selected Key を返す)ここで Map Player Key を呼ぶ
On Is Selecting Key Changed入力待ちに入った/抜けたとき「キーを押してください」の表示切り替え

詳細パネルの Key Selection Text で入力待ち中の表示文字を、 No Key Specified Text で未設定時の文字を変えられます。 Escape KeysEscape を入れておくと、キャンセルできるようになります。

自前で作りたい場合は、UMGウィジェットで Is Focusable をオンにし、On Key Down をオーバーライドして押されたキーを取る方法もあります。ただし修飾キーやゲームパッドの扱いを自分で書くことになるため、まずはInput Key Selectorで組むほうが早いです。

Sponsored

重複した割り当てをどう扱うか

Map Player Key は、 同じキーが他で使われていても、そのまま登録します 。ジャンプと攻撃の両方をEにすることも可能で、その場合は両方が同時に発火します。

止めたいなら、自分で判定を挟みます。考え方は単純で、 設定画面に並べている項目のキーを配列として持ち、選ばれたキーが既にあるかを調べる だけです。

選ばれたキーが既存の割り当てと一致したとき、警告を出すか入れ替えるかの分岐図

対応は3通りあります。ゲームの性格で選んでください。

方針動き向いているゲーム
拒否する「そのキーは使用中です」と出して変更しない操作数が少なく、被りが事故になるもの
入れ替える元の持ち主のキーを、いま変更した側の旧キーにする操作数が多いアクション。プレイヤーの手数が最少
許すそのまま両方に割り当てる意図的な同時発火を使うゲーム

個人開発では 拒否する が一番手軽で、誤操作も防げます。表示は「変更できませんでした」ではなく、 どの操作と衝突したのかを名前で出す と親切です。ここで Display Name を入れておいた効果が出ます。

キーボードとゲームパッドを分ける

1つのMapping Nameは、 First から Fourth までの4つのSlot を持てます。同じ「ジャンプ」に対して複数のキーを登録できる、という意味です。

Slotよくある使い方
Firstキーボード/マウス
Secondゲームパッド
Third / Fourth予備(別デバイス、サブ割り当て)

Map Player KeySlot を切り替えるだけなので、実装は難しくありません。設定画面を「キーボード」と「ゲームパッド」のタブに分け、それぞれのボタンから 同じMapping Nameに、違うSlotで 登録します。

IMC側も、Slotの数だけ行を用意しておく のが前提です。IA_JumpSpace Bar の行しかない状態では、ゲームパッド用の枠がそもそも存在しません。Gamepad Face Button Bottom の行を足し、そちらにも Player Mappable Key Settings を設定して、同じ Name を入れておきます。

パッドそのものの対応(スティックのDead Zone、トリガー、UIのフォーカス)は ゲームパッド対応 を先に済ませておくと、この節がそのまま活きます。

補足: 登録先のSlotが無い場合に自動で作らせる bCreateMatchingSlotIfNeeded という引数もあります。ただし挙動を追いにくくなるため、まずはIMC側に行を用意する方針をおすすめします。

Sponsored

実践:ジャンプのキーを変更して保存する

アクションゲーム、ホラーゲーム、パズル。ジャンルを問わず、設定画面の「操作」タブは公開するゲームにほぼ必ず載ります。ここでは、その最小構成を1つ作ります。

完成形

設定画面で「ジャンプ」の欄をクリックし、Eキーを押す。閉じてPlayすると、Spaceでは跳ばずEで跳ぶ。エディタを閉じて開き直しても、Eのまま残っています。

設定画面でジャンプがSpaceからEに変わり、再起動後もEのままである流れを示した図

再現条件

Third Person テンプレート で新規プロジェクトを作り、次の状態にします。

種類名前設定
Project SettingsEngine > Enhanced InputEnable User Settings をオン → エディタ再起動
Input Mapping ContextIMC_Defaultテンプレート標準のもの(Content/ThirdPerson/Input
IMCのキー行IA_JumpSpace BarPlayer Mappable Key Settings を設定。 Name = JumpDisplay Name = ジャンプ
Widget BlueprintWBP_KeyConfig親クラス User Widget
WBP_KeyConfig の中身Text(テキストブロック)文字は ジャンプ
WBP_KeyConfig の中身KeySelector_JumpInput Key SelectorIs Variable をオンEscape KeysEscape
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からGet Enhanced Input User Settings、Map Player Key、Apply Settings、Save Settingsへ順につながるノードグラフ
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に任せる、という分担が扱いやすい形です。

Sponsored

おまけ:先に知っておくと良いこと

  • 現在の割り当てをUIに読み戻す部分は、バージョン差が大きい: 起動時に「いまSpaceが割り当たっている」を表示するには、Get Current Key Profile から現在のプロファイルを取り出して問い合わせます。ただし取得ノードの名前と引数はUE5.3から5.5の間で変わっているため、 お使いのバージョンで Get Current Key Profile から線を伸ばし、候補を確認してください 。この記事では、確実に動く経路だけを実践に載せています
  • キーの表示名は Get Display Name で取れる: Key 型から伸ばすと、Space Bar E のような表示用のテキストが返ります。設定画面のラベルはこれで作れます
  • Escapeを潰さない: Input Key SelectorEscape 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 SettingsName
プレイヤーの上書きを持つEnhanced Input User Settings
押されたキーを受け取るUMGの Input Key Selector
反映するApply Settings
保存するSave Settings

そして、Blueprintのゲームロジックは最後まで 1ノードも変わりません 。入力を IA_Jump という名前で受けておいたことが、そのまま設定画面の実現につながっています。

あなたのゲームで、プレイヤーに変えさせたい操作はいくつあるでしょうか。まずは1つ、名前を付けるところから始めてみてください。