6.

UE5でEscキーでイベントを発生させる方法|入力設定とメニュー開閉

編集

Unreal Engine 5(UE5)でEscキー押下からイベント(メニューの開閉など)を発火させるには、Escキーを「入力アクション」として登録し、そのアクションが発生したときに実行したい処理(ウィジェットの表示や閉じる、ポーズ切り替えなど)をBlueprintでつなぐのが基本です。UE5には新しい「Enhanced Input(強化入力)」と、従来からある「Action Mapping(アクションマッピング)」の2つの入力の仕組みがあり、新規プロジェクトではEnhanced Inputが標準として推奨されています。この記事では、入力の設定からEscキーのイベント受け取り、ポーズメニュー開閉の具体例、そしてEsc特有の落とし穴までを順に解説します。

この記事の要点
  • Escキーでイベントを起こす流れは「①入力を設定 → ②Escのイベントを受け取る → ③処理をつなぐ」の3ステップ。
  • UE5の標準はEnhanced Input。Input Action(入力アクション)とInput Mapping Context(入力マッピングコンテキスト)にEscキーを割り当てる方式が推奨されている。
  • 従来のAction Mapping(Project Settings → Engine → Input)でも設定可能。既存プロジェクトの保守などで使われる。
  • キーイベントを直接置く方法(KeyboardイベントのEscape)もあるが、Escの扱いには注意が必要。
  • Escはエディタ上のプレイ(PIE)で「プレイ停止」に割り当てられているため、エディタ内テストではEscでPIEが終了してしまうことがある。挙動の確認はスタンドアロン実行などで行うのが安全。
  • 入力モード(Input Mode)の設定によっては、Escがウィジェット側に届かないことがある。受け取り場所(Player ControllerかWidgetか)を意識する。

Escキーでイベントを発火させる全体の流れ

キー入力で何かを起こす処理は、どの方法を選んでも次の3つのステップに整理できます。

  1. 入力を設定する:Escキーを「アクション」として登録し、ゲームがその押下を認識できるようにします。
  2. Escキーのイベントを受け取る:登録したアクションがBlueprint上で「イベントノード」として現れるので、それを起点にします。
  3. 処理をつなぐ:イベントの先に、実行したい処理(メニューを開く、閉じる、ポーズするなど)をノードで接続します。

以下では「入力を設定する」部分を、推奨されるEnhanced Inputと従来のAction Mappingの2通りで説明し、その後にイベントの受け取りと具体例へ進みます。

手段①:Enhanced Input(推奨)でEscキーにアクションを割り当てる

Enhanced Inputは、UE5で標準として用意されている入力システムです。入力を「データアセット」として扱うため、後からキーの差し替えや、状況に応じた入力の切り替え(例:通常時とポーズ時で入力を変える)がしやすいのが特長です。新規プロジェクトでは、まずこの方式を検討することが推奨されます。

大まかな手順は次の通りです。

  1. Input Action(入力アクション)を作成:コンテンツブラウザで右クリックし、Input → Input Action を作成します(例:IA_Pause)。Escでオン/オフを切り替えるような単純な操作であれば、値の型(Value Type)は Digital (bool) を選びます。
  2. Input Mapping Context(入力マッピングコンテキスト)を作成:同じくInput → Input Mapping Context を作成します(例:IMC_Default)。これは「どのキーがどのアクションに対応するか」をまとめたアセットです。
  3. キーを割り当てる:作成したマッピングコンテキストを開き、Mappingsに先ほどの IA_Pause を追加して、キーに「Escape」を割り当てます。
  4. マッピングコンテキストを有効化する:プレイ開始時などに、マッピングコンテキストをプレイヤーへ適用する必要があります。Player ControllerやPawn等のBegin Playで、Get Enhanced Input Local Player Subsystem を取得し、Add Mapping Context ノードで IMC_Default を追加します。これを行わないと、キーを設定してもアクションが反応しません。
  5. イベントを受け取る:適用後は、Blueprintのイベントグラフで右クリックし、EnhancedInputAction IA_Pause というイベントノードを置けます。このノードの実行ピン(TriggeredやStartedなど)から、行いたい処理へつなぎます。

マッピングコンテキストを途中で入れ替えられる点はメニュー実装と相性が良く、「通常プレイ用の入力」と「メニュー操作用の入力」を切り替える設計にも応用できます。具体的なノード名やオプションはバージョンによって細部が異なる場合があるため、利用中のUE5バージョンの公式ドキュメントもあわせて確認することをおすすめします。

手段②:従来のAction Mapping(Project Settings)でEscキーを設定する

UE5には、従来からのAction Mappingも引き続き用意されています。既存プロジェクトの保守や、シンプルな構成で手早く試したい場合に使われることがあります。手順は次の通りです。

  1. メニューから Edit → Project Settings を開きます。
  2. 左の一覧から Engine → Input を選びます。
  3. BindingsAction Mappings に新しいアクションを追加します。名前を付け(例:Pause)、キーに「Escape」を割り当てます。
  4. Blueprintのイベントグラフで右クリックし、設定した名前のアクションイベント(例:InputAction Pause)を配置します。このイベントの「Pressed(押した瞬間)」などの出力から、処理をつなぎます。

Action Mappingは設定が比較的シンプルですが、実行時のキー差し替えや状況による入力切り替えといった柔軟性ではEnhanced Inputに分があります。新規に作るなら手段①を、すでにAction Mappingで組まれているプロジェクトを触るなら手段②を、というように使い分けるとよいでしょう。

手段③:キーイベントを直接置く方法と、その注意点

アクションを登録せず、Blueprint上に「Escape」のキーイベントを直接置く方法もあります。イベントグラフで右クリックし、検索欄に「Escape」と入力すると、Keyboardイベントの Escape ノードが見つかります。手軽ですが、いくつか注意点があります。

  • この方法は、その入力を受け取れる対象(Player ControllerやPawn、入力が有効なActorなど)に置く必要があります。置き場所によっては反応しません。
  • キーをハードコードする形になるため、後からキー設定を変えたい場合の柔軟性は低くなります。再設定のしやすさを重視するなら、手段①または②のアクション方式が適しています。
  • Escは後述のとおりエディタや入力モードの影響を受けやすいキーです。直接置く場合でも、受け取り場所と入力モードの確認が重要になります。

Esc入力をどこで受け取るか:Player ControllerとWidget

Escのイベントを「どこで受け取るか」は、メニュー実装で意外と重要なポイントです。代表的な受け取り場所は次の2つです。

  • Player Controller(または Pawn)で受け取る:ゲーム全体の入力として扱いたい場合に向きます。「Escでポーズメニューを開く」といったゲーム側の状態変化は、ここで受け取るのが自然です。
  • Widget(UMGの画面)で受け取る:すでにメニューやUIが開いていて「Escでそのメニューを閉じる」といった場合は、ウィジェット側でキーを受け取る実装が有効なことがあります。とくに入力モードをUI向けに切り替えている状況では、Player Controller側にEscが届かず、ウィジェット側で受け取る必要が出てくる場合があります。

UIを表示する際は、入力の流れ先を制御する Set Input Mode 系のノード(Game Only / UI Only / Game And UI)を使うことがあります。これらの設定により、キー入力がゲーム側へ流れるか、UI側へ流れるかが変わります。Escが思った場所に届かないときは、この入力モードの状態をまず確認してください。

具体例:Escでポーズメニューを開閉する

ここでは、Escキーで「メニューが閉じていれば開く」「開いていれば閉じる」というトグル(切り替え)動作を作る考え方を示します。下記はノードのつながりを文章で表したもので、実際にはこれらをBlueprintのワイヤーで接続します。

// Player Controller などでEscのアクションイベントからメニューをトグルするBlueprintの流れ(概念図)

EnhancedInputAction IA_Pause (Triggered)

 → Branch(条件: 「メニューを開いているか」を表す bool 変数 bMenuOpen)

  False(閉じている)→ Create Widget(PauseMenu)→ Add to Viewport → Set Input Mode UI Only → bMenuOpen = true

  True(開いている) → Remove from Parent(メニューWidget)→ Set Input Mode Game Only → bMenuOpen = false

ポイントは、「いま開いているかどうか」を覚えておくための変数(上記の bMenuOpen)を用意し、その状態に応じて開く処理と閉じる処理を分岐(Branch)させることです。実際のプロジェクトでは、ポーズしたい場合に Set Game Paused を併用したり、メニューを閉じるときにマウスカーソルの表示・非表示を切り替えたりと、必要に応じて処理を足していきます。

なお、ポーズ中(ゲームが一時停止している状態)でも入力を受け取りたい場合は、入力やイベントが「一時停止中でも動作する」設定になっているかを確認する必要があります。Enhanced Inputとポーズの組み合わせは状況によって挙動が異なることがあるため、ポーズ機能を絡める場合は実機で動作確認を行ってください。

落とし穴:Escキー特有の注意点

つまずきやすいポイント
  • エディタ上のプレイ(PIE)ではEscがプレイ停止に使われる:エディタ内でプレイ中にEscを押すと、メニューが開く前にプレイ自体が止まってしまうことがあります。これはエディタ側の挙動で、Escでイベントが起きないと早合点しやすい原因です。Escの動作確認は、スタンドアロン実行(New Editor Window / Standalone Game)やパッケージ後のビルドで行うと確実です。エディタの設定でPIE時のEsc挙動を変えられる場合もありますが、まずは別ウィンドウ実行で切り分けるのが安全です。
  • 入力モードによってEscが届かない:Set Input Mode を UI Only にしていると、Player Controller側のEsc入力が反応しないことがあります。その場合は、ウィジェット側でキーを受け取る、または入力モードを Game And UI にするなどの対処を検討します。
  • マッピングコンテキストの適用忘れ(Enhanced Input):Input Actionにキーを割り当てても、Add Mapping Context でマッピングコンテキストをプレイヤーに適用していないと反応しません。「設定したのに動かない」ときは、まずここを確認してください。
  • 受け取り場所と入力の有効化:キーイベントを直接置く方式では、入力を受け取れるActor上に置く必要があります。Pawnに置く場合は入力が有効化(Possess済みなど)されているかを確認します。
  • 新規はEnhanced Inputを基本に:今後の保守性や拡張性を考えると、新規プロジェクトではEnhanced Inputを基本に据えるのが無難です。Action Mappingは既存資産との互換のために残されていると捉えるとよいでしょう。

よくある質問(FAQ)

Q. Escを押してもイベントが発生しません。何を確認すればよいですか?

まず、エディタ内プレイ(PIE)でテストしていないか確認してください。PIEではEscがプレイ停止に割り当てられているため、スタンドアロン実行で再確認します。次に、Enhanced Inputならマッピングコンテキストを Add Mapping Context で適用しているか、Action Mappingなら名前とキー割り当てが正しいか、そして入力モード(Set Input Mode)の設定でEscが意図した場所に届いているかを順に確認します。

Q. Enhanced InputとAction Mapping、どちらを使うべきですか?

新規に作るならEnhanced Inputが推奨されます。実行時のキー再設定や、状況に応じた入力切り替え(通常時とメニュー時など)がしやすいためです。一方、すでにAction Mappingで組まれている既存プロジェクトを触る場合は、その方式に合わせる方が混乱が少なく済みます。

Q. メニューが開いている間だけEscで閉じたいです。どう実装しますか?

「メニューが開いているか」を表すbool変数を用意し、Escのイベントで分岐させるのが基本です。メニュー表示中はウィジェット側でEscを受け取る実装にすると、UI Onlyの入力モード下でも閉じる操作を拾いやすくなります。開く・閉じるそれぞれで入力モードやカーソル表示を適切に切り替えると、操作感が安定します。

まとめ

UE5でEscキーからイベントを発火させるには、「①入力の設定 → ②Escのイベント受け取り → ③処理の接続」という流れを押さえるのが近道です。設定方法は、推奨されるEnhanced Input(Input ActionとInput Mapping Contextにキーを割り当て、マッピングコンテキストを適用)と、従来のAction Mapping(Project Settings → Engine → Input)の2通りがあり、加えてキーイベントを直接置く方法もあります。Escはエディタ上のプレイで停止に使われたり、入力モードによって届く場所が変わったりと特有の注意点があるため、動作確認はスタンドアロン実行で行い、受け取り場所(Player ControllerかWidgetか)を意識して実装すると、ポーズメニューの開閉のようなインタラクションを安定して実現できます。細かなノード名やオプションは使用中のバージョンで異なる場合があるため、不確実な点は公式ドキュメントでの確認をおすすめします。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ブループリントで途中から親クラスを指定する方法
  2. C++で編集となっているコンポーネントをブループリントで編集する方法
  3. Boolean変数の初期値を変更する方法
  4. ブループリントで特定のキーが押された時にイベントを発火させる方法
  5. ブループリントで配列からインデックスを指定して取得する方法
  6. Blueprintで「Esc」キーを使ってイベントを発生させる方法
  7. Blueprintで「Cast To」を使い、複数のクラスに対応する方法
  8. Blueprintで指定した確率で処理を分岐させる方法
  9. FrameGrabberをBlueprintで使用する方法
  10. ブループリントで現在日時を取得する方法

最近更新/作成されたページ