【Unreal Engine】UE5でキーコンフィグを作る:ジャンプのキーを変えて、保存する

作成: 2026-07-20最終更新: 2026-09-05

Spaceでジャンプするキャラクターに、キー変更の設定画面を追加します。初期割り当てとプレイヤーの上書きを分けて考え、Input Key Selectorでの入力、User Settingsへの登録・変更・保存、現在のキーの表示まで順に組み立てます。

「ジャンプはSpaceよりJのほうが押しやすい」。プレイヤーがそう感じたとき、自分でキーを変えられるのがキーコンフィグです。割り当てを変えることを、リバインドとも呼びます。

設定画面でキー名が変わるだけでは、まだ完成ではありません。画面を閉じたら新しいキーで跳べること、ゲームを起動し直しても選んだキーが残ることまで、ひと続きの機能として作ります。

この記事では、ジャンプのSpaceをJへ変える設定画面を題材にします。まず1行を動かしてから、自分のゲームの操作へ広げましょう。

SpaceからJへキーを変更し、同じ練習用キャラクターをジャンプさせる

この記事でわかること

  • 初期割り当てと、プレイヤーが変えた割り当ての関係
  • 変更対象をUser Settingsへ登録する理由
  • 押されたキーの取得、割り当ての変更、現在のキーの表示
  • 変更の保存、キャンセル、初期値へ戻す流れ

Sponsored

初期割り当ての上に、プレイヤーの変更を重ねる

Enhanced Inputでは、Input Action(IA)が「ジャンプ」という操作、Input Mapping Context(IMC)が「Spaceでジャンプする」という割り当てを持ちます。

ここへ、Enhanced Input User Settingsというプレイヤーの設定を加えます。開発者が決めたSpaceは初期値として残し、プレイヤーが選んだJを上書きとして持たせます。元の表へ、変更用の付箋を重ねるイメージです。

担当今回、覚えること
IA_PracticeJumpジャンプという操作
IMC_PlayerControls初期割り当てはSpace
User SettingsこのプレイヤーはJを使う

ジャンプを実行するBlueprintは、引き続きIA_PracticeJumpを受けます。キーを変えるたびに、Jumpノードの接続を変える必要はありません。

IA・IMC・User Settingsの3層。初期割り当てのSpaceの上に、プレイヤーが選んだJが重なる

この分担を作っておくと、「プレイヤーの変更を保存する」「初期値へ戻す」という処理も、ジャンプの動きから分けて扱えます。

練習の準備と、変更する行の登録

UE5.3以降のEnhanced Input User Settingsを使います。Blueprintの変数と関数、UMGで部品を置く基本操作を知っている人向けです。

Enhanced Inputの入門記事で作った練習用プロジェクトを続けて使います。次の状態を確認してください。

  • BP_InputPracticeをプレイヤーとして動かし、Spaceでジャンプできる
  • IMC_PlayerControlsに、IA_PracticeJumpのSpace Barが1つだけある
  • InputSubsystem変数に、プレイヤーのEnhanced Input Local Player Subsystemを保存している
  • BeginPlayでIMC_PlayerControlsとIMC_Commonを有効にしている

今回はジャンプの1枠だけを扱います。JはEnhanced Input入門で使っていないキーなので、変更後の違いを確かめやすくなります。運転モードへ切り替えた場合は、徒歩へ戻してから試します。

1. User Settingsを有効にする

Playを止め、「編集」→「プロジェクト設定」でEnhanced Inputを開き、Enable User Settingsをオンにします。変更を保存し、開いているアセットも保存してからエディタを再起動します。

User Settingsは、プレイヤーごとの変更を保持・保存する窓口です。Enhanced Input入門のInputSubsystemが「今使う操作表」の管理役だったのに対し、こちらは「このプレイヤーが選んだ設定」を扱います。

2. ジャンプの行へ名前を付ける

IMC_PlayerControlsを開き、IA_PracticeJumpのSpace Barの行を展開します。

  1. Setting Behaviorを Override Settings にする
  2. Player Mappable Key Settingsの選択欄から「Player Mappable Key Settings」を選び、項目を展開する
  3. Nameを JumpKey、Display Nameを ジャンプ にする

Override Settingsは、「このキー行に用意した設定を使う」という選択です。Player Mappableは、プレイヤーが変更できる割り当てという意味です。

Nameは、後から変更対象を探すための名前です。画面に見せる「ジャンプ」と、処理が探す JumpKey を分けています。IAのアセット名を自動で探してくれるわけではないので、以降もJumpKeyで揃えます。

ジャンプのSpace行へ、処理用のNameと表示用のDisplay Nameを設定する

ほかのキー行は変更しません。保存して閉じます。

3. 設定の窓口へ、この操作表を登録する

BP_InputPracticeでGet InputSubsystemから Get User Settings を作ります。出力を変数へ昇格し、InputUserSettings と名付けます。

SubsystemからUser Settingsを取得し、変数へ保存する

BeginPlayの白い線を、次の順に組み直します。

  1. Set InputSubsystem
  2. Set InputUserSettings
  3. Is ValidでInputUserSettingsを確認
  4. Is Valid側から Register Input Mapping Context
  5. 既存のAdd Mapping ContextでIMC_PlayerControlsを追加
  6. 既存のAdd Mapping ContextでIMC_Commonを追加

RegisterのTargetはGet InputUserSettings、IMCはIMC_PlayerControlsです。AddのTargetは、Enhanced Input入門と同じGet InputSubsystemです。Is Not Valid側はPrint Stringで User Settings unavailable と表示し、そこで止めます。

User Settingsを確認し、有効ならIMCを登録して既存のAddへ進む

Registerは変更対象の登録、Addは操作表の有効化を担当します。似ていますが、役割が違います。Registerを通すことで、JumpKeyという変更対象がUser Settingsへ用意されます。

コンパイルしてPlayし、エラーが出ず、Spaceで跳べることを確認します。まだキーは変わりません。ここまでで、変更を受け付ける側の準備ができました。

キーを選ぶ設定画面を作る

Playを止め、Widget Blueprintを作って WBP_KeySettings と名付けます。UMGが初めてなら、Widget Blueprintの入門でDesignerとGraphの使い分けを確認できます。

DesignerでCanvas Panelの中央へVertical Boxを置き、次の部品を縦に並べます。文字とボタンが収まるよう、幅は400程度を目安にします。

部品名前表示・設定
Text見出し用ジャンプのキー
Input Key SelectorJumpKeySelectorキーを選ぶ部品。Is Variableをオン
TextStatusText最初は空欄。Is Variableをオン
Button+TextCloseButton閉じる

Input Key Selectorは、クリックすると次のキーを待ち、選ばれたキーを表示する部品です。ボタンと入力待ちを一から作らずに使えます。ただし、ゲームの割り当ての変更や保存は、これからつなぐ処理の担当です。

JumpKeySelectorは次のように設定します。

  • Allow Gamepad Keys:オフ
  • Allow Modifier Keys:オフ
  • Key Selection Text:キーを押してください
  • No Key Specified Text:未設定
  • Escape Keys:BackSpaceを追加
WBP_KeySettingsに並べる4つの部品と、JumpKeySelectorの設定

この練習では、変更を待っている間にBackspaceを押すと取り消せるようにします。エディタのPlayではEscがプレイ終了に使われるため、試しやすい別のキーにしています。Backspaceをジャンプへ割り当てる練習ではありません。

WBP_KeySettingsへ次の変数を作ります。

変数用途
InputUserSettingsEnhanced Input User SettingsのObject Reference設定を読み書きする相手。Instance EditableとExpose on Spawnをオン
bRefreshingKeyBoolean、既定値falseプログラムから表示を直している間の目印

Expose on Spawnは、Widgetを作るときに値を渡せる設定です。後でBP_InputPracticeから、取得済みのInputUserSettingsを渡します。変数を設定したら、Widgetをコンパイルして保存します。

画面を開き、ゲーム操作へ戻る

部品を並べた画面を、まずゲームから開けるようにします。キー変更中は入力をUIへ向け、閉じたらキャラクターへ戻します。

1. Kキーで開く

InputPracticeフォルダへ、Digital (Bool)の IA_OpenKeySettings を作ります。Triggersは空にし、IMC_CommonでKへ割り当てます。設定画面を開くキーは、今回変更するジャンプの行とは別です。

BP_InputPracticeでIA_OpenKeySettingsのStartedから Create Widget を呼び、ClassにWBP_KeySettingsを指定します。

  • Owning Player:Get Player Controller(Player Index=0)
  • Input User Settings:Get InputUserSettings

Owning Playerは、この画面を使うプレイヤーです。渡したControllerは、UIとゲームの入力を切り替えるときにも使います。

Create WidgetのReturn Valueを変数へ昇格し、KeySettingsWidget と名付けます。白い線を次の順に接続します。

  1. Create Widget → Set KeySettingsWidget
  2. Add to Viewport(TargetはGet KeySettingsWidget)
  3. Set Input Mode UI Only
  4. Set Show Mouse Cursor=true
StartedからWidgetを作り、Owning PlayerとInput User Settingsを別々に渡して変数へ保存する

Set Input Mode UI OnlyのPlayer ControllerはGet Player Controllerの出力、In Widget to FocusはGet KeySettingsWidgetです。Mouse Lock ModeはDo Not Lockにし、Flush Inputがある版ではオンにします。Set Show Mouse Cursorも、同じControllerをTargetにします。

WBP_KeySettingsのClass DefaultsでIs Focusableをオンにしておきます。UI Onlyは、設定画面を触る間の入力をUIへ向ける指定です。

Widgetを表示し、入力先とマウスカーソルを設定する

2. 閉じるボタンで操作を戻す

WBP_KeySettingsでCloseButtonのOn Clickedを追加します。白い線を Remove From Parent(Target=self)→ Set Input Mode Game OnlySet Show Mouse Cursor=false へつなぎます。

Game OnlyのPlayer Controllerには Get Owning Player を渡し、Flush Inputをオンにします。マウスカーソルのTargetも同じGet Owning Playerです。押されていたキーの状態を引き継がず、ゲーム操作へ戻すための設定です。

閉じるボタンから画面を消し、入力をゲームへ戻してマウスカーソルを隠す

画面を消すだけでは、入力先がUI Onlyのまま残ります。画面を閉じる処理と、入力をゲームへ戻す処理をセットにします。

コンパイルしてPlayし、Kで画面を開いてみます。この段階ではキー欄は「未設定」のままで構いません。「閉じる」で操作へ戻り、Spaceで跳べれば、画面の出入りができました。次に、この欄へ実際のキーを表示します。

Sponsored

現在のキーを読み出して表示する

設定画面を開くたびにSpaceと書いてしまうと、前回Jへ変えた人にもSpaceと表示されます。表示するのは、初期値ではなく現在のキーです。

RefreshJumpKey関数を作る

WBP_KeySettingsに、入力も戻り値もない関数 RefreshJumpKey を作ります。

まず、Get InputUserSettingsから Find Mappings in Row を置き、Mapping NameをJumpKeyにします。返ってくるのは、この名前に属する割り当ての集まりです。出力から To Array を作り、配列として取り出せる形にします。

今回はSpaceの1枠だけなので、配列のLengthが 1 と等しいかを調べます。

JumpKeyの割り当てを配列へ変換し、件数が1か比べる

関数の入口からSet bRefreshingKey=true、続いてBranchへつなぎ、この比較をConditionへ渡します。

BranchのFalse側は、JumpKeySelectorをSet Is Enabled=falseにし、StatusTextへSet Textで JumpKeyの登録を確認してください と表示します。最後にSet bRefreshingKey=falseへつなぎます。1枠であることを確かめてから、配列の0番を読むためです。

表示更新中の目印を立て、1枠ある場合と登録を確認する場合へ分ける

割り当ての中から読むのは、プレイヤーが今使うCurrent Keyです。Default KeyはIMCで決めた初期値なので、ここでは使いません。

Input Chordは、キーとShiftなどの修飾キーをひとまとめにした値です。今回はJやSpaceの1キーを扱いますが、Selectorへ渡すときは、この形に包みます。

配列の0番からCurrent Keyを取り出し、Input Chordへ包んで表示に使う

True側は、次の順に処理します。

  1. JumpKeySelectorをTargetに Set Is Enabled を呼び、trueにする
  2. 配列のGet(Index=0)を Break Player Key Mapping へ渡す
  3. Current Keyを Make Input Chord のKeyへ渡す。Shift/Ctrl/Alt/Cmdはすべてfalse
  4. JumpKeySelectorをTargetに Set Selected Key を呼び、Make Input Chordの出力をIn Selected Keyへ渡す
  5. Set bRefreshingKey=falseで終える

Get、Break、Makeは値を渡すためのノードです。白い線はBranchからSet Is Enabled、Set Selected Key、Set bRefreshingKeyの順に通します。

Selectorを有効にして現在のキーを表示し、更新中の目印を解除する

bRefreshingKeyは、表示を直す処理がキー変更として再び受け取られても、繰り返し処理しないための目印です。次の節で使います。

イベントグラフの Event Construct からRefreshJumpKeyを呼びます。画面が組み立てられるたびに、現在の設定からキー表示を作れるようになりました。コンパイルしてPlayし、Kで開いた欄が「未設定」からSpaceへ変わることを確かめます。

選んだキーへ変更して保存する

DesignerでJumpKeySelectorを選び、詳細のEventsから On Key Selected を追加します。これが、キーを選んだときに受け取るイベントです。

1. 表示の更新中なら、変更処理を始めない

On Key SelectedからBranchへつなぎ、ConditionにはGet bRefreshingKeyを渡します。True側はつながず終了、False側からキー変更を進めます。

On Key Selectedの入口で、表示更新中なら終了し、それ以外をキー変更へ渡す

これでRefreshJumpKeyによる表示更新と、プレイヤーが選んだ変更を分けられます。

2. 選んだキーと、変更先を渡す

イベントのSelected Keyを Break Input Chord へ渡します。先ほど表示用に包んだ値を、今度は分けて、Keyを取り出します。

Map Player Key を置き、TargetをGet InputUserSettingsにします。In Argsは、どの枠を何のキーへ変えるかをまとめて渡す入力です。このピンから Make Map Player Key Args を作り、次の値を入れます。

項目設定
Mapping NameJumpKey
SlotFirst
New KeyBreak Input ChordのKey
Hardware Device IdNone
Profile Id関連空欄のまま
Create Matching Slot If Neededオフ
Defer On Settings Changed Broadcastオフ

Slotは、同じ操作へ用意するキーの枠です。今回はジャンプの1つ目だけを変更するのでFirstを使います。枠を増やす処理にはしません。デバイス別の識別や複数プロファイルは、ここでは既定のまま進めます。

Selected Keyを分解し、JumpKeyのFirstへ渡す変更用の値を組み立てる

白い線は、前のBranchのFalseからMap Player Keyへつなぎます。Selected KeyをそのままNew Keyへ渡すのではなく、Break Input ChordのKeyを渡す点を確認してください。

実行線、User SettingsのTarget、変更内容のIn ArgsをMap Player Keyへ別々に渡す

3. 変更できたら保存し、表示を読み直す

Map Player Keyの Failure Reason は、変更できなかった理由を入れる集まりです。中身が0件なら、失敗理由はありません。

Failure Reasonから Get Num Gameplay Tags in Container を作り、Return Valueが0と等しいかを調べます。ノード名は長いですが、ここで調べるのは失敗理由の件数です。Map Player Keyの白い出力をBranchへつなぎ、この比較をConditionへ入れます。

失敗理由の件数を0と比較し、保存する経路と表示を戻す経路へ分ける

True側はSave Settings → RefreshJumpKey → StatusTextのSet Textとつなぎ、変更しましたと表示します。Save SettingsのTargetはGet InputUserSettings、Set TextのTargetはStatusTextです。

成功した変更を保存し、現在のキーを読み直して完了メッセージを表示する

False側は保存せず、RefreshJumpKey → StatusTextのSet Textとつなぎ、変更できませんでした。登録名と枠を確認してくださいと表示します。Selectorが一時的に選んだキーを、設定側が実際に持つキーへ戻すためです。

変更に失敗した場合は、元のキー表示を読み直して理由を確認するメッセージを表示する

Map Player Keyは実行中の割り当てを変更し、Save Settingsは次の起動でも使えるよう保存します。画面を閉じて同じゲームを続けるだけなら保存漏れに気付きにくいため、後で起動し直して確かめます。

表示、動作、保存を順に試す

キー表示を変え、ゲームでジャンプを試し、起動し直して設定の保存を確かめる

すべてコンパイルして保存し、Playしてゲーム画面をクリックします。

  1. Spaceで跳べることを確認し、着地してからKを押す
  2. 設定画面にSpaceが表示される
  3. キー欄をクリックし、Jを押して離す。「変更しました」とJが表示される
  4. 「閉じる」を押す。Jで跳べ、Spaceでは跳ばなくなる
  5. Kで開き直しても、Jが表示される
  6. キー欄をクリックし、Backspaceで取り消す。Jのままなら取消も確認できる

次にPlayを終了し、もう一度開始します。さらにエディタを閉じてプロジェクトを開き直した場合も、設定画面のJと、Jでのジャンプを確認します。

表示が残ることと、実際にそのキーで動くことの両方を見ます。保存した設定はUser Settingsの初期化時に読み込まれ、起動時のRegisterで同じJumpKeyの項目を用意する流れになります。

Sponsored

初期値へ戻すボタンを加える

設定画面へButtonを追加し、ResetButton、表示文字を「初期値に戻す」にします。

On Clickedから Reset All Player Keys In Row を呼びます。TargetはGet InputUserSettings、In ArgsはMake Map Player Key Argsです。Mapping NameをJumpKeyにし、ほかは既定のままにします。

ResetButtonからJumpKeyの行を初期割り当てへ戻し、結果の確認へ進む

このノードは、指定した操作行を初期割り当てへ戻します。今回のJumpKeyは1枠だけなので、Spaceへ戻ります。すべての操作の設定を消す処理ではありません。

Failure Reasonを前の節と同じように0件か調べ、Branchで分けます。

  • True:Save Settings → RefreshJumpKey → StatusTextを 初期値に戻しました にする
  • False:RefreshJumpKey → StatusTextを 初期値に戻せませんでした にする

Jへ変更してからこのボタンを押し、Spaceの表示とSpaceでのジャンプを確認します。起動し直してもSpaceなら、初期値へ戻した結果も保存できています。

元の表を残してプレイヤーの変更を重ねる仕組みが、ここで役立ちます。「初期値は何だったか」を画面側の文字列で別に覚える必要がありません。

うまく動かないときのチェック

まず「設定を読めない」「変更できない」「ゲーム入力へ届かない」「保存されない」のどこで止まったかを分けます。

症状確認するところ
User Settings unavailableと出るEnable User Settingsを有効にして再起動したか。Get User SettingsのTargetがInputSubsystemか
JumpKeyの登録を確認してくださいと出るSpace行のOverride Settings、Name=JumpKey、Registerの実行を確認。JumpKeyに余分なキー行を作っていないか
Input User Settings入力がCreate Widgetに出ないWidget側の変数でInstance EditableとExpose on Spawnをオンにし、コンパイルしたか
Selected KeyをNew KeyへつなげないBreak Input ChordでKeyだけを取り出したか
「変更できませんでした」と出るMapping Name=JumpKey、Slot=Firstか。登録前に変更していないか
Jの表示なのに跳べない徒歩モードか。「閉じる」でGame Onlyへ戻したか。IA_PracticeJumpがJumpを呼ぶか
開き直すとSpaceと表示されるRefreshJumpKeyがDefault KeyではなくCurrent Keyを使っているか
再起動すると元へ戻るMap成功後のSave Settingsが実行されているか。起動時にリセット処理を呼んでいないか
表示更新が何度も続くSet Selected Keyの前後でbRefreshingKeyを切り替え、On Key Selected側で止めているか

詳しく調べるときは、MapやResetのFailure Reasonを文字列化してPrint StringとOutput Logへ出すと、失敗理由を追えます。

おまけ:操作を増やすときの考え方

同じキーを選んだら、どうする?

今回は空いているJで試しました。移動のWや、設定画面を開くKをジャンプにも割り当てると、操作が競合します。Map Player Keyを呼ぶだけで、ゲームに都合のよい整理まで自動で行われるわけではありません。

方針プレイヤーへの見せ方
重複を許可する同じキーを複数の操作に使う
重複を拒否する「そのキーは移動に使われています」と知らせる
入れ替える既存の操作を、変更前のキーへ移す

同じキーで両方の処理が動くかは、IMCの優先度や入力を消費する設定にも関わります。まずは変更前にほかの割り当てと比較し、重複を拒否する形が追いやすいでしょう。設定画面を開くキーや取消キーを予約する考え方もあります。

Slotとデバイスを分けて考える

Slotは、たとえばジャンプに「SpaceとJの2候補」を持たせるときの枠です。FirstやSecondが、そのままキーボードやゲームパッドを意味するわけではありません。

ゲームパッドの割り当ても変更可能にするなら、どの操作・枠・デバイスを対象にするか決め、表示する行とMapへ渡す対象を揃えます。同じJumpKeyへ複数枠を登録する場合は、読み出しのLength=1という判定も見直します。ゲームパッド対応の記事が次の入口になります。

Apply Settingsと保存は、同じ処理ではない

Enhanced Input User Settingsの Apply Settings は、独自の入力設定を適用したり、適用後の更新を知らせたりするためのものです。既定ではOnSettingsAppliedを通知します。

今回のキー変更はMap Player Key、保存はSave Settings、画面の読み直しはRefreshJumpKeyで役割が揃っています。「Applyを呼ばなければ新しいキーが保存されない」とは考えないでください。

設定項目の名前は、公開後も大切にする

JumpKeyのようなNameは、保存した設定と現在の操作を結びつける名前です。後から気軽に変えると、以前の設定との対応が失われることがあります。

操作を増やしたら、移動・ジャンプ・攻撃などの行ごとに何を変更するのかを整理します。最初の1行で作った「現在の値を読む → 選び直す → 結果を確かめて保存する」という流れを、各行で使い回せます。

まとめ

キーコンフィグは、キーを待ち受ける画面と、プレイヤーの割り当てを持つ設定をつなぐ機能です。Input Key Selectorでキーを受け取り、User Settingsへ登録したJumpKeyの枠を変更します。

仕上げでは、表示だけで成功と判断せず、画面を閉じた後のジャンプと、起動し直した後のキーも確かめましょう。1行が最後まで動けば、操作項目を増やすときにも同じ流れを土台にできます。

参考:User Settings操作表の登録Map Player KeyInput Key SelectorApply Settingsの役割

Unreal Engine このセクションのノート98