ポーズメニューを作る手順そのものは短いです。Widgetを作り、Set Game Paused を呼ぶ。それだけで敵も物理も止まります。ところが実際に動かすと、メニューは出ているのにボタンが押せない、マウスカーソルが見えない、解除したら今度はキャラクターが動かない、という状態になります。
原因は、ポーズが止めているのが ゲームの世界だけ で、 入力の向き先 はまったく別に管理されているからです。この記事では、Set Game Paused で何が止まって何が止まらないのかを整理し、Input Modeとマウスカーソルの切り替え、Enhanced Inputがポーズ中に反応しない理由、そしてEscキーで開閉するポーズメニューの作り方までを解説します。
動作確認環境: UE 5.4 以降
この記事でわかること
Set Game Pausedが止めるもの(Tick・Timer・物理・アニメーション)と、止めないもの(UI)- Input Mode の3種類と、マウスカーソルの出し方
- ポーズ中でも動かしたいActorの
Tick Even when Paused- Enhanced Inputで ポーズ解除のキーだけ別扱い にする
Trigger When Paused- 実践: Escで開き、再開・タイトルへ戻るの2ボタンが機能するポーズメニュー
Set Game Pausedで何が止まるか
ポーズの本体は Set Game Paused ノード1つです。Blueprintで右クリックして検索すると出てきます。ピンは Paused (Boolean)だけで、true を渡せばポーズ、false で解除です。戻り値のBooleanは「実際にポーズ状態を変更できたか」を返します。
このノードが止めているのは、ワールドの時間の進みです。具体的には次のようになります。
| 対象 | ポーズ中 |
|---|---|
Actorの Event Tick | 止まる |
Set Timer by Event / by Function Name | 止まる |
| 物理シミュレーション(落下・衝突) | 止まる |
| Skeletal Meshのアニメーション | 止まる |
| Timelineノード | 止まる |
| Niagaraなどのエフェクト | 止まる |
| UMGのWidget | 止まらない |
| Widget Animation | 止まらない |
| Player Controllerのマウス操作 | 止まらない |

重要なのは最後の3行です。 UI(Slate)はワールドの時間とは別の時計で動いています。 だからこそ、ポーズ中でもボタンのホバー演出は反応し、メニューのフェードイン演出も再生されます。ポーズメニューが成立するのは、この分離があるおかげです。
一方で、この分離があるために「メニューは動いているのに、押しても何も起きない」という状態が生まれます。 表示されていることと、入力がそこへ向いていることは別 だからです。
止まった世界でUIだけ動かす
キーボードやマウスの入力をどこへ流すかは、 Player Controller が持つ Input Mode で決まります。3種類あり、それぞれ専用のノードが用意されています。
| ノード | 入力の行き先 | 主な用途 |
|---|---|---|
| Set Input Mode Game Only | ゲーム側のみ | 通常のプレイ中 |
| Set Input Mode UI Only | UI側のみ | ポーズメニュー、タイトル画面 |
| Set Input Mode Game and UI | 両 方 | インベントリを開いたまま歩ける作り |

この3つは Player Controller のメンバー関数ではなく、 Widget Blueprint Library の関数 です。ノードの Player Controller ピンに対象を渡して使います(Player Controller内から呼ぶなら Self を繋ぎます)。
もう1つ、 Game And UI は「両方へ同時に配る」わけではありません 。まずUIへ渡し、UIが処理しなかった入力だけがゲーム側へ流れます。
Set Input Mode UI Only には In Widget to Focus というピンがあります。ここに、開いたばかりのポーズメニューWidgetを渡してください。渡しておくと、そのWidgetが最初からフォーカスを持った状態になり、ゲームパッドやキーボードで即座に操作できます。
そしてもう1つ、Widget側の設定が要ります。
注意:
Is Focusableは Widget BlueprintのClass Defaults(Interactionカテゴリ)にあり、 既定値はオフ です。ここをオンにすると、そのWidget自身がフォーカスを受け取れるようになります。ただし オンにしただけでは、最初のボタンが自動で選ばれるわけではありません 。ゲームパッドですぐ操作させたいなら、Widget側の
Event Constructなどで対象のButtonにSet Keyboard Focusを実行してください。
マウスカーソルは別管理です。Player Controllerの Show Mouse Cursor はただのBoolean変数なので、Set Show Mouse Cursor で切り替えます。 Input Modeを変えてもカーソルは自動では出ません。 この2つは必ずセットで扱ってください。
ポーズ中でも動かしたいものがあるとき
「ポーズ中もカメラだけはゆっくり回したい」「背景の演出だけは動かしたい」という要望が出ることがあります。この場合はActor単位で例外を作れます。
Actor Blueprintの詳細パネルで、Actor Tickカテゴリを開き、 Tick Even when Paused をオンにします。これでそのActorの Event Tick だけはポーズ中も呼ばれ続けます。
| 設定場所 | 項目 | 効果 |
|---|---|---|
| Actor Blueprint > Class Defaults > Actor Tick | Tick Even when Paused | そのActorのTickがポーズ中も動く |
| Actor Blueprint > Class Defaults > Actor Tick | Start with Tick Enabled | 併せてオンでないとそもそもTickしない |
ただし、これを使っても そのActorの物理やアニメーション、各Componentが自動で動き出すわけではありません 。Event Tick から明示的に呼んだ処理だけが実行される、と考えてください。
Delta Seconds にはフレーム間隔が渡りますが、これは壁時計の実時間そのものではありません。ポーズ中の経過時間を正確に測りたい場合は Get Real Time Seconds を使います。
例外を増やすほど、何が止まって何が動くのかを追いにくくなります。 まずは例外なしで作り、必要になってから1つずつ開ける のが安全です。
補足: 「ゆっくりにしたいだけ」で完全には止めたくない場合は、ポーズではなく
Set Global Time Dilationを使います。0.1などを渡すとスローモーションになり、アニメーションも物理もその速度で動き続けます。ヒットストップやバレットタイムはこちらです。
Enhanced Inputはポーズ中に止まる
ここが実装で最もつまずく箇所です。Enhanced Inputで作ったInput Actionは、 既定ではポーズ中に発火しません。 ポーズを開いたキーをもう一度押しても、閉じるイベントが来ないという状態になります。
対処は、Input Actionアセット側の1項目です。
- ポーズ用のInput Action(例:
IA_Pause)をダブルクリックして開く - 詳細パネルの
Trigger When Pausedにチェックを入れる - 保存する

この設定は Input Actionごと です。つまり、移動や攻撃のアクションは止めたまま、 ポーズ解除のキーだけを通す ことができます。これがまさに欲しい挙動です。
逆に言うと、ここを全アクションでオンにしてはいけません。ポーズ中に攻撃入力が通ってしまい、解除した瞬間にまとめて処理が走ります。 オンにするのはポーズ用のアクション1つだけ にしてください。
Enhanced Inputそのものの導入手順はEnhanced Input Systemの記事で扱っています。
実践:Escで開くポーズメニューを作る
アクションゲームの中断、パズルゲームのやり直し、ホラーゲームの設定変更。 ポーズメニューはジャンルを問わず必ず要ります。 ここでは「再開」「タイトルへ戻る」の2ボタンが実際に機能するところまで作ります。
完成形
Escを押すと世界が止まり、画面中央にメニューが出てマウスカーソルが現れます。背景の回転するCubeは完全に静止しますが、ボタンにマウスを乗せると色が変わります。「再開」を押すとメニューが消え、Cubeが再び回り始めます。

再現条件
Third Person テンプレート で新規プロジェクトを作り、次を用意します。
| # | 作るもの | 内容 |
|---|---|---|
| 1 | BP_RotatingCube | Actor派生。Static Mesh(Cube)を追加し、Event Tick → Add Actor Local Rotation(Delta Rotation の Yaw に Delta Seconds × 90)。レベルに1つ配置し、動きが止まったことを目で確認する目印にします |
| 2 | WBP_PauseMenu | User Widget派生。Canvas Panelの中央にVertical Boxを置き、Buttonを2つ入れて、それぞれの中にText(「再開」「タイトルへ戻る」)を入れる |
| 3 | BP_PauseController | Player Controller 派生 |
| 4 | IA_Pause | Input Action。Value Type は Digital (bool) 。詳細パネルの Trigger When Paused をオン |
| 5 | IMC_Default | Third Personテンプレートに既にあるInput Mapping Contextへ IA_Pause を追加し、キーに P と Escape の2つを割り当てる |
| 6 | GameMode設定 | BP_ThirdPersonGameMode を開き、Player Controller Class を BP_PauseController に変更 |
WBP_PauseMenu はClass Defaultsで Is Focusable をオン にしておきます。
変数(BP_PauseController に作る)
| 変数名 | 型 | 初期値 | 用途 |
|---|---|---|---|
PauseMenuClass | User Widget の Class参照 | WBP_PauseMenu | 生成するWidgetの種類 |
PauseMenuWidget | User Widget の オブジェクト参照 | None | 生成したWidgetを覚えておく |
注意: PIE(エディタ内プレイ)では
Escapeを押すとプレイ自体が終了します。 動作確認はPキーで行うか、Play > Standalone Gameで起動してください。パッケージ後はEscapeが正しくポーズとして働きます。
メニューを開く
BP_PauseController のイベントグラフに、次のグラフを組みます。

Event BeginPlay
→ Get Enhanced Input Local Player Subsystem
→ Add Mapping Context (Mapping Context = IMC_Default, Priority = 0)
EnhancedInputAction IA_Pause (Started)
→ Branch (Condition = Is Valid(PauseMenuWidget) を反転)
True(まだ開いていない):
→ Create Widget (Class = PauseMenuClass, Owning Player = Self)
→ Set PauseMenuWidget(戻り値を保存)
→ Add to Viewport (Target = PauseMenuWidget)
→ Set Input Mode Game And UI (Player Controller = Self, In Widget to Focus = PauseMenuWidget,
Hide Cursor During Capture = false)
→ Set Show Mouse Cursor (Target = Self, Show Mouse Cursor = true)
→ Set Game Paused (Paused = true)
False(すでに開いている):
→ ResumeGame を呼ぶ(下の関数)
順番には理由があります。 Widgetを作ってViewportへ追加してからでないと、In Widget to Focus に渡すものが存在しません。 そのため「作る → 出す → 入力を向ける → カーソルを出す → 止める」の順に固定します。
ここで2つ、選択の理由があります。
Startedを使う:Triggeredは押している間ずっと発火しうるため、開閉が高速で繰り返されます。押した瞬間の1回だけが要るのでStartedにしますUI OnlyではなくGame And UI:UI Onlyは ゲーム入力を完全に遮断します 。同じIA_Pauseでメニューを閉じたいのに、そのキーがPlayer Controllerまで届かなくなります。Game And UIなら、UIが処理しなかった入力がゲーム側へ流れるので、同じキーで閉じられます
再開する
BP_PauseController に ResumeGame というカスタムイベントを作り、開く手順を逆順に戻します。

Custom Event ResumeGame
→ Set Game Paused (Paused = false)
→ Remove from Parent (Target = PauseMenuWidget)
→ Set PauseMenuWidget = None ← 忘れると2回目に開けなくなる
→ Set Input Mode Game Only (Player Controller = Self, Flush Input = true)
→ Set Show Mouse Cursor (Target = Self, Show Mouse Cursor = false)
PauseMenuWidget を None に戻す行が要点です。ここを飛ばすと、Is Valid が真のままになり、2回目のEscで「すでに開いている」と判定され続けます。
ボタンをつなぐ
WBP_PauseMenu のグラフで、2つのボタンの On Clicked を配線します。
Button_Resume (On Clicked)
→ Get Owning Player
→ Cast To BP_PauseController
→ ResumeGame(カスタムイベントを呼ぶ)
Button_Title (On Clicked)
→ Set Game Paused (Paused = false) ← 先に解除する
→ Remove from Parent (Target = Self)
→ Open Level (by Name) (Level Name = タイトルレベル名)
「タイトルへ戻る」で Set Game Paused(false) を先に呼ぶのは、後始末を確実にするためです。通常の Open Level ではワールドごと置き換わるので必須ではありませんが、ポーズ・Input Mode・カーソルを明示的に戻してから遷移する形にしておくと、後で遷移方法を変えても壊れません。
注意: このボタンを動かすには、 遷移先のタイトルレベルを実際に作成して保存 しておく必要があります。
Level Nameにはそのレベルのアセット名(拡張子なし)を入れてください。存在しない名前を指定すると、その場で止まります。レベル遷移そのものはOpen Levelの記事で扱っています。
確認する
P キーを押してください。 回転していたCubeがその角度でぴたりと止まり、キャラクターも操作できなくなり、画面中央のメニューが表示され、マウスカーソルが現れれば成功 です。ボタンにカーソルを乗せると、Cubeが止まったままでもボタンの色が変わります。ここがUIとワールドが別の時計で動いている証拠です。
「再開」を押すと、Cubeが 止まった角度から 回転を再開します。
- メニューは出るがボタンを押せない →
Set Input Mode Game And UIを呼んでいない、またはShow Mouse Cursorがfalseのまま - ゲームパッドで選択できない →
Is FocusableはWidget自身がフォーカスを受けるための設定です。最初のボタンを選ばせるには、Widget側で対象のButtonにSet Keyboard Focusを実行してください - 2回目のP で開かない →
ResumeGameでPauseMenuWidgetをNoneに戻していない - 押しっぱなしで開閉が高速で繰り返される →
Triggeredを使っている。Startedに変える - ポーズ中にキーを押しても閉じない →
IA_PauseのTrigger When Pausedがオフ。あるいはSet Input Mode UI Onlyを使っていて、ゲーム入力が遮断されている - 解除後にキャラクターが動かない →
Set Input Mode Game Onlyを呼び忘れ - 解除後もマウスカーソルが残る →
Set Show Mouse Cursor(false)を呼び忘れ - Escでプレイ自体が終わる → PIEの仕様。
PキーかStandalone Gameで確認する
ポイントは2つです。
- 開く手順と閉じる手順を必ず対にする: Widget生成・Input Mode・マウスカーソル・ポーズの4つは、開くときに触ったものを閉じるときにすべて戻します。片方だけ忘れると「操作できない」「カーソルが残る」という形で必ず表面化します
- 開閉の判定はWidget参照1つに寄せる:
bIsPausedのようなBooleanを別に持つと、Widgetの実体とズレたときに直せなくなります。PauseMenuWidgetがNoneかどうかだけを見れば、状態は1つに保てます
メニューの見た目やレイアウトを詰める段階になったら、UMG Widget Blueprintの記事とフォーカス管理の記事が続きになります。
うまく動かないときのチェック
実装が正しく見えるのに動かないときは、次の順に切り分けます。
| 症状 | 見るところ |
|---|---|
| そもそもポーズ用のイベントが来ない | Add Mapping Context を Event BeginPlay で実行しているか。Player Controllerを差し替えた場合、Character側に書いた入力処理は動きません |
| Player Controllerが差し替わっていない | GameModeの Player Controller Class を変更したか。World Settingsの GameMode Override を使っている場合、そちらのGameModeを見ます |
| ポーズ中にWidgetのボタンが灰色 | ボタンの Is Enabled がオフになっていないか |
| ポーズしても音が鳴り続ける | 音は既定でポーズの影響を受けません。止めたい場合はSound Class / Sound Mixで分けて制御します |
| ポーズ中もカメラが動く | マウス入力がUI側に切り替わっていない。Set Input Mode UI Only の Target がPlayer Controllerになっているか |
Print String で Is Game Paused の値を出すと、「ポーズできていないのか、入力が届いていないのか」を1発で分けられます。デバッグ出力の使い方はPrint Stringの記事にまとめています。
おまけ:先に知っておくと良いこと
- ポーズ処理はPlayer Controllerに置く: Characterに書くと、キャラクターが死んで破棄された瞬間にポーズを開けなくなります。Player Controllerはレベル中ずっと生きているので、こうした「常に受け付けたい入力」の置き場所として適しています
- 音はポーズの対象外:
Set Game PausedはSoundを止めません。効果音だけ止めてBGMを残すなら、Sound Classを分けたうえでSound Mixで音量を下げるのが定番です(→ Sound Cueの記事) - マルチプレイでは向かない:
Set Game Pausedはサーバー側のワールド全体を止めます。技術的に不可能ではありませんが、他のプレイヤーも巻き添えになるため、 プレイヤー個別のメ ニューには使えません 。オンライン対戦では「メニューを開いてもゲームは進む」設計にします - 設定画面はポーズメニューの子にする: 「設定」ボタンで別Widgetへ切り替えるときは、ポーズメニューを
Remove from Parentせず、Set VisibilityでCollapsedにして残しておくと、戻るボタンの実装が単純になります - Timelineも止まる: 扉の開閉などをTimelineで動かしている場合、ポーズ中は途中で静止します。解除すると続きから再生されるので、扱いとしては自然です(→ Timelineノードの記事)
まとめ
Set Game Pausedが止めるのは ワールドの時間 。Tick・Timer・物理・アニメーション・Timelineが止まる- UIは止まらない 。Slateは別の時計で動くので、ポーズ中もボタンとWidget Animationは反応する
- 入力の行き先は Input Mode が決める。
Set Input Mode UI OnlyとSet Show Mouse Cursorはセットで扱う - Enhanced Inputは既定でポーズ中に止まる。
Trigger When Pausedをポーズ用アクションだけオン にする - 開く手順と閉じる手順を 対にする 。戻し忘れが「操作できない」の正体
いま作っているゲームで、プレイヤーが中断したくなるのはどんな場面でしょうか。その瞬間に何を止めて何を残したいかを決めると、必要な設定が自然に決まります。