この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:T
更新日時:2026-06-11 07:12:00

タイトル: 「Esc」キーを押してメニュー画面を開く方法
SEOタイトル: UE5 Esc キーでメニュー画面(ポーズ)を開く完全ガイド(Enhanced Input / Widget / Pause)

この記事の要点
  • UE5 で Esc キー → ポーズメニューの定番実装手順
  • Enhanced InputIA_OpenMenu Input Action を作り、Esc キーにマップ
  • Pawn / Player Controller で Set Game Paused (true) + Set Input Mode UI Only
  • Widget Blueprint でメニュー UI、Add to Viewport で表示、Resume で Remove from Parent
  • マウスカーソル: Set Show Mouse Cursor (true)、マルチプレイは Pause が同期しない点に注意

全体フロー

UE5 でゲーム中に Esc キーを押すと「PAUSE」「Resume」「Settings」「Quit」のメニューが表示される、よくあるポーズメニュー機能の作り方です。

処理の流れ

1. ゲーム実行中、ユーザーが Esc を押下
2. Enhanced Input Action (IA_OpenMenu) が Trigger 発火
3. Player Controller / Pawn の Blueprint で Bind
4. Pause Menu Widget を生成(Create Widget)
5. Add to Viewport で画面に表示
6. Set Game Paused = true でゲーム停止
7. Set Input Mode = UI Only でゲーム操作を止める
8. Set Show Mouse Cursor = true でマウス表示

[再開]
1. メニュー内 Resume ボタン押下
2. Remove from Parent で Widget 撤去
3. Set Game Paused = false
4. Set Input Mode = Game Only
5. Set Show Mouse Cursor = false

手順1: Enhanced Input の Input Action 作成

UE5.1 以降、Input 周りは Enhanced Input に移行しています(旧 Input は非推奨)。

  1. Content Browser で右クリック → Input → Input Action を作成、名前を IA_OpenMenu
  2. 開いて Value Type を Digital (bool) に設定
  3. 続けて Input → Input Mapping Context を作成、名前を IMC_Default
  4. IMC_Default を開き、+ MappingsIA_OpenMenu を追加
  5. キーに Escape を指定
  6. 必要に応じてゲームパッドの Start / Special Right も追加

手順2: Pawn / Player Controller でバインド

BP_PlayerController の Event Graph

[ Event BeginPlay ]
    ↓
[ Get Player Controller (0) ]
    ↓
[ Cast To Enhanced Input Local Player Subsystem ]
    ↓
[ Add Mapping Context (IMC_Default, Priority=0) ]
    ↓
(バインドは Pawn 側、または Player Controller 側で)

[ Enhanced Input Action IA_OpenMenu (Triggered) ]
    ↓
[ Open Pause Menu (custom event) ]

C++ で書く場合のスニペット:

// MyPlayerController.h
UCLASS()
class MYGAME_API AMyPlayerController : public APlayerController
{
    GENERATED_BODY()

public:
    UPROPERTY(EditDefaultsOnly, Category="Input")
    TObjectPtr<class UInputMappingContext> DefaultMappingContext;

    UPROPERTY(EditDefaultsOnly, Category="Input")
    TObjectPtr<class UInputAction> OpenMenuAction;

    UPROPERTY(EditDefaultsOnly, Category="UI")
    TSubclassOf<class UUserWidget> PauseMenuClass;

protected:
    virtual void BeginPlay() override;
    virtual void SetupInputComponent() override;

    void HandleOpenMenu();
};

// MyPlayerController.cpp
void AMyPlayerController::BeginPlay()
{
    Super::BeginPlay();
    if (auto* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(GetLocalPlayer()))
    {
        Subsystem->AddMappingContext(DefaultMappingContext, 0);
    }
}

void AMyPlayerController::SetupInputComponent()
{
    Super::SetupInputComponent();
    if (auto* EIC = Cast<UEnhancedInputComponent>(InputComponent))
    {
        EIC->BindAction(OpenMenuAction, ETriggerEvent::Triggered, this, &AMyPlayerController::HandleOpenMenu);
    }
}

void AMyPlayerController::HandleOpenMenu()
{
    if (PauseMenuClass)
    {
        UUserWidget* Menu = CreateWidget<UUserWidget>(this, PauseMenuClass);
        if (Menu) Menu->AddToViewport();
        SetPause(true);
        bShowMouseCursor = true;
        FInputModeUIOnly Mode;
        Mode.SetWidgetToFocus(Menu->TakeWidget());
        SetInputMode(Mode);
    }
}

手順3: Pause Menu Widget の作成

  1. Content Browser で右クリック → User Interface → Widget Blueprint、名前 WBP_PauseMenu
  2. Designer タブで Canvas Panel に Vertical Box を配置
  3. Vertical Box の中に Button を 3 つ追加: Resume / Settings / Quit
  4. 各 Button の OnClicked イベントを Graph に追加

WBP_PauseMenu のイベント Graph

[ On Clicked (Resume Button) ]
    ↓
[ Set Game Paused (false) ]
    ↓
[ Remove from Parent (self) ]
    ↓
[ Get Player Controller (0) ]
    ↓
[ Set Show Mouse Cursor (false) ]
    ↓
[ Set Input Mode Game Only ]


[ On Clicked (Settings Button) ]
    ↓
[ Create Widget (WBP_Settings) ]
    ↓
[ Add to Viewport ]


[ On Clicked (Quit Button) ]
    ↓
[ Quit Game (Player Controller=0, Quit Preference=Quit) ]

手順4: Input Mode と Mouse Cursor

Input Mode動作
Game Onlyゲーム操作のみ、UI フォーカスなし
UI OnlyUI 操作のみ、ゲーム入力を完全に止める ★ メニュー時
Game and UI両方受け付け、HUD のホバー等に
[ Open Menu ]
- Create Widget WBP_PauseMenu
- Add to Viewport
- Set Game Paused = true
- Set Show Mouse Cursor = true
- Set Input Mode UI Only Ex
    In Widget to Focus = WBP_PauseMenu

[ Close Menu ]
- Remove from Parent
- Set Game Paused = false
- Set Show Mouse Cursor = false
- Set Input Mode Game Only

Pause の挙動とフラグ

Set Game Paused は内部的に UGameplayStatics::SetGamePaused を呼びます。これにより:

  • すべての Tick が止まる(Pause 中も動かしたい Actor は bTickEvenWhenPaused = true
  • Timer / Animation も停止
  • SetTimerByEvent 等もカウント停止
  • マルチプレイヤーではクライアント側のみ Pauseされる(サーバは止まらない)

ポーズ中も UI / BGM を動かす

WBP_PauseMenu の Class Defaults
- Is Focusable: true

AudioComponent / UMG Widget で
- Receive Tick While Paused: true
- bTickEvenWhenPaused: true

ButtonHover アニメーション、ループ BGM は通常設定で動くが、
World 内の SoundComponent は止まる。

マルチプレイヤーの場合の制約

状況挙動対処
クライアントが Pause自分のクライアントだけ止まる正常動作
サーバが Pause全員止まるシングルプレイ感覚で使うと事故
オンライン対戦中Pause せず、UI だけ出すのが慣例Set Game Paused 呼ばない
協力プレイ全員一致で Pause したいRPC で全クライアントに Pause 指示

FocusWidget でゲームパッド対応

[ Set Input Mode UI Only Ex ]
    In Widget to Focus = Resume Button  ← 個別 Widget を渡せる

[ Set Keyboard Focus ]   on Resume Button
    → ゲームパッドの方向キーでメニュー間移動できる

[ Set Show Mouse Cursor ]   = true / false
[ Set Cinematic Mode ]      = true でカメラ等を固定する応用

よくあるトラブル

症状原因対処
Esc キーで PIE が終了するEditor Preference の Stop on Escape が ONProject Settings → Level Editor → Play で OFF
Esc 押しても何も起きないMapping Context 未 AddBeginPlay で Add Mapping Context
メニューは出るが操作できないInput Mode が Game OnlySet Input Mode UI Only に変更
マウスが見えないSet Show Mouse Cursor 忘れPlayer Controller の同プロパティを true
Resume してもキャラが動かないSet Game Paused = false 忘れResume 時に明示的に false
Widget が二重に出るEsc を連打で複数生成変数 IsMenuOpen でガード

ガード処理(多重表示防止)

Player Controller 変数: IsMenuOpen (Boolean)

[ Enhanced Input IA_OpenMenu (Triggered) ]
    ↓
[ Branch ] ← IsMenuOpen
    │ False
    ↓
[ Open Menu ]
    ↓
[ Set IsMenuOpen = true ]

メニュー Close 時
    ↓
[ Set IsMenuOpen = false ]

FAQ

Q: Esc 以外に「P」や Start ボタンでも開きたい
A: IMC_DefaultIA_OpenMenu に複数キーを追加できます。Mappings の + ボタンで Escape / P / Generic Gamepad Special Right などを並べるだけ。

Q: メニュー中に BGM だけは続けたい
A: BGM 用の AudioComponent で Receive Tick While Paused を ON、Sound Cue 側で bIgnoreForPause を ON。

Q: 旧 Input (Project Settings → Input) からの移行は?
A: Input Action / Input Mapping Context を新規作成し、Player Controller の SetupInputComponent で Bind します。旧 ActionMapping は非推奨のため新規プロジェクトは Enhanced Input 一択。