【Unreal Engine】UE5のポーズ機能:Set Game Pausedと、止まった世界で動くUI

作成: 2026-07-20

UE5でポーズメニューを作る手順を図解。Set Game Pausedで何が止まって何が止まらないか、Input Modeとマウスカーソルの切り替え、Enhanced Inputがポーズ中に反応しない理由と対処まで。

ポーズメニューを作る手順そのものは短いです。Widgetを作り、Set Game Paused を呼ぶ。それだけで敵も物理も止まります。ところが実際に動かすと、メニューは出ているのにボタンが押せない、マウスカーソルが見えない、解除したら今度はキャラクターが動かない、という状態になります。

原因は、ポーズが止めているのが ゲームの世界だけ で、 入力の向き先 はまったく別に管理されているからです。この記事では、Set Game Paused で何が止まって何が止まらないのかを整理し、Input Modeとマウスカーソルの切り替え、Enhanced Inputがポーズ中に反応しない理由、そしてEscキーで開閉するポーズメニューの作り方までを解説します。

ポーズ中の世界とその上で動くUIを対比したイメージ

動作確認環境: UE 5.4 以降

この記事でわかること

  • Set Game Paused が止めるもの(Tick・Timer・物理・アニメーション)と、止めないもの(UI)
  • Input Mode の3種類と、マウスカーソルの出し方
  • ポーズ中でも動かしたいActorの Tick Even when Paused
  • Enhanced Inputで ポーズ解除のキーだけ別扱い にする Trigger When Paused
  • 実践: Escで開き、再開・タイトルへ戻るの2ボタンが機能するポーズメニュー

Sponsored

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のマウス操作止まらない
ポーズ中に止まるものと止まらないものを、ワールド側とUI側の2層に分けて示した図

重要なのは最後の3行です。 UI(Slate)はワールドの時間とは別の時計で動いています。 だからこそ、ポーズ中でもボタンのホバー演出は反応し、メニューのフェードイン演出も再生されます。ポーズメニューが成立するのは、この分離があるおかげです。

一方で、この分離があるために「メニューは動いているのに、押しても何も起きない」という状態が生まれます。 表示されていることと、入力がそこへ向いていることは別 だからです。

止まった世界でUIだけ動かす

キーボードやマウスの入力をどこへ流すかは、 Player Controller が持つ Input Mode で決まります。3種類あり、それぞれ専用のノードが用意されています。

ノード入力の行き先主な用途
Set Input Mode Game Onlyゲーム側のみ通常のプレイ中
Set Input Mode UI OnlyUI側のみポーズメニュー、タイトル画面
Set Input Mode Game and UI両方インベントリを開いたまま歩ける作り
Game Only・UI Only・Game and UIで入力の行き先が変わることを示した3分割の比較図

この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つは必ずセットで扱ってください。

Sponsored

ポーズ中でも動かしたいものがあるとき

「ポーズ中もカメラだけはゆっくり回したい」「背景の演出だけは動かしたい」という要望が出ることがあります。この場合はActor単位で例外を作れます。

Actor Blueprintの詳細パネルで、Actor Tickカテゴリを開き、 Tick Even when Paused をオンにします。これでそのActorの Event Tick だけはポーズ中も呼ばれ続けます。

設定場所項目効果
Actor Blueprint > Class Defaults > Actor TickTick Even when PausedそのActorのTickがポーズ中も動く
Actor Blueprint > Class Defaults > Actor TickStart 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項目です。

  1. ポーズ用のInput Action(例: IA_Pause)をダブルクリックして開く
  2. 詳細パネルの Trigger When Paused にチェックを入れる
  3. 保存する
IA_PauseだけTrigger When Pausedをオンにし、移動や攻撃のアクションは止まったままにする図

この設定は Input Actionごと です。つまり、移動や攻撃のアクションは止めたまま、 ポーズ解除のキーだけを通す ことができます。これがまさに欲しい挙動です。

逆に言うと、ここを全アクションでオンにしてはいけません。ポーズ中に攻撃入力が通ってしまい、解除した瞬間にまとめて処理が走ります。 オンにするのはポーズ用のアクション1つだけ にしてください。

Enhanced Inputそのものの導入手順はEnhanced Input Systemの記事で扱っています。

Sponsored

実践:Escで開くポーズメニューを作る

アクションゲームの中断、パズルゲームのやり直し、ホラーゲームの設定変更。 ポーズメニューはジャンルを問わず必ず要ります。 ここでは「再開」「タイトルへ戻る」の2ボタンが実際に機能するところまで作ります。

完成形

Escを押すと世界が止まり、画面中央にメニューが出てマウスカーソルが現れます。背景の回転するCubeは完全に静止しますが、ボタンにマウスを乗せると色が変わります。「再開」を押すとメニューが消え、Cubeが再び回り始めます。

Escを押すと回転Cubeが止まりメニューが出る前後の比較図

再現条件

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

#作るもの内容
1BP_RotatingCubeActor派生。Static Mesh(Cube)を追加し、Event TickAdd Actor Local Rotation(Delta Rotation の Yaw に Delta Seconds × 90)。レベルに1つ配置し、動きが止まったことを目で確認する目印にします
2WBP_PauseMenuUser Widget派生。Canvas Panelの中央にVertical Boxを置き、Buttonを2つ入れて、それぞれの中にText(「再開」「タイトルへ戻る」)を入れる
3BP_PauseControllerPlayer Controller 派生
4IA_PauseInput Action。Value Type は Digital (bool) 。詳細パネルの Trigger When Paused をオン
5IMC_DefaultThird Personテンプレートに既にあるInput Mapping Contextへ IA_Pause を追加し、キーに PEscape の2つを割り当てる
6GameMode設定BP_ThirdPersonGameMode を開き、Player Controller ClassBP_PauseController に変更

WBP_PauseMenu はClass Defaultsで Is Focusable をオン にしておきます。

変数(BP_PauseController に作る)

変数名初期値用途
PauseMenuClassUser Widget の Class参照WBP_PauseMenu生成するWidgetの種類
PauseMenuWidgetUser Widget の オブジェクト参照None生成したWidgetを覚えておく

注意: PIE(エディタ内プレイ)では Escape を押すとプレイ自体が終了します。 動作確認は P キーで行うか、Play > Standalone Game で起動してください。パッケージ後は Escape が正しくポーズとして働きます。

メニューを開く

BP_PauseController のイベントグラフに、次のグラフを組みます。

IA_PauseのStartedからCreate Widget、Add to Viewport、Set Input Mode Game And UI、Set Show Mouse Cursor、Set Game Pausedへ順につながるノードグラフ図
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_PauseControllerResumeGame というカスタムイベントを作り、開く手順を逆順に戻します。

ResumeGameからSet Game Paused(false)、Remove from Parent、Set Input Mode Game Only、Set Show Mouse Cursor(false)へつながるノードグラフ図
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)

PauseMenuWidgetNone に戻す行が要点です。ここを飛ばすと、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 Cursorfalse のまま
  • ゲームパッドで選択できないIs Focusable はWidget自身がフォーカスを受けるための設定です。最初のボタンを選ばせるには、Widget側で対象のButtonに Set Keyboard Focus を実行してください
  • 2回目のP で開かないResumeGamePauseMenuWidgetNone に戻していない
  • 押しっぱなしで開閉が高速で繰り返されるTriggered を使っている。Started に変える
  • ポーズ中にキーを押しても閉じないIA_PauseTrigger 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の実体とズレたときに直せなくなります。PauseMenuWidgetNone かどうかだけを見れば、状態は1つに保てます

メニューの見た目やレイアウトを詰める段階になったら、UMG Widget Blueprintの記事フォーカス管理の記事が続きになります。

Sponsored

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

実装が正しく見えるのに動かないときは、次の順に切り分けます。

症状見るところ
そもそもポーズ用のイベントが来ないAdd Mapping ContextEvent 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 StringIs 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 VisibilityCollapsed にして残しておくと、戻るボタンの実装が単純になります
  • Timelineも止まる: 扉の開閉などをTimelineで動かしている場合、ポーズ中は途中で静止します。解除すると続きから再生されるので、扱いとしては自然です(→ Timelineノードの記事

まとめ

  • Set Game Paused が止めるのは ワールドの時間 。Tick・Timer・物理・アニメーション・Timelineが止まる
  • UIは止まらない 。Slateは別の時計で動くので、ポーズ中もボタンとWidget Animationは反応する
  • 入力の行き先は Input Mode が決める。Set Input Mode UI OnlySet Show Mouse Cursor はセットで扱う
  • Enhanced Inputは既定でポーズ中に止まる。 Trigger When Paused をポーズ用アクションだけオン にする
  • 開く手順と閉じる手順を 対にする 。戻し忘れが「操作できない」の正体

いま作っているゲームで、プレイヤーが中断したくなるのはどんな場面でしょうか。その瞬間に何を止めて何を残したいかを決めると、必要な設定が自然に決まります。