27.

UE5でメニュー画面を作成・表示する方法|UMGとAdd to Viewport

編集
この記事の要点
  • UE5 のメニュー画面は ウィジェットブループリント(UMG)で UI を作り、Create WidgetAdd to Viewport で表示する
  • ボタンの OnClicked イベントに Open Level / Quit Game / Remove from Parent を結線して、開始・終了・閉じるを実装
  • Set Input Mode UI Only / Game and UI / Game OnlyShow Mouse Cursor で入力モードとカーソル表示を切り替える
  • メインメニューは 専用レベルに置き、Open Level でゲーム本編へ遷移するのが定番構成
  • ポーズメニューは Set Game Paused (true/false) で時間を止めるのがセオリー

UE5 のメニュー画面の基本構成

Unreal Engine 5(UE5)でメニュー画面を作るときは、UMG(Unreal Motion Graphics)と呼ばれる UI システムを使います。具体的には ウィジェットブループリントで見た目を作り、レベルブループリントやプレイヤーコントローラーから Create WidgetAdd to Viewport の流れで画面に表示します。

本ページでは、もっとも頻出するメインメニュー・ポーズメニューの作り方を順を追って解説します。

1. ウィジェットブループリントを作る

  1. コンテンツブラウザで右クリック
  2. ユーザーインターフェース → ウィジェットブループリント
  3. 親クラスは User Widget を選択
  4. 名前を WBP_MainMenu のように分かりやすく付ける

ダブルクリックでウィジェットエディタが開きます。デザイナタブで UI を配置していきます。

2. レイアウトの基本

要素役割
Canvas Panelルートの自由配置パネル(デフォルト)
Vertical Box / Horizontal Boxボタンを縦/横に並べる
Buttonボタン。OnClicked イベントを持つ
Text Blockテキスト表示。ボタン内の文字にも使う
Image背景画像 / アイコン
Spacer余白

メインメニューなら、Canvas Panel の中央に Vertical Box を置き、その中に「PLAY」「OPTIONS」「QUIT」のボタンを縦に並べるのが定番です。

3. ボタンのイベントを設定する

ウィジェットエディタ右上のGraphタブに切り替え、配置したボタンを選択して OnClicked イベントを追加します。

PLAY ボタン:ゲーム本編へ遷移

  • OnClicked (PlayButton)Open Level (by Name) → ゲーム本編のレベル名を入れる
  • Remove from Parent で自身を消す(任意。Open Level するとレベルが変わるので必須ではない)

OPTIONS ボタン:設定ウィジェットを表示

  • OnClicked (OptionsButton)Create Widget(クラス: WBP_Options)→ Add to Viewport
  • 必要に応じてメインメニュー側を Set Visibility → Collapsed で隠す

QUIT ボタン:ゲームを終了

  • OnClicked (QuitButton)Quit Game(Player Controller を渡す)
  • Quit Preference は Quit(モバイルなら Background も可)

4. メインメニューをレベルブループリントから表示する

メインメニュー専用のレベル(例: L_MainMenu)を作り、そのレベルブループリントで以下の処理を組みます。

  1. Event BeginPlay
  2. Create Widget(Class: WBP_MainMenu、Owning Player: Get Player Controller)
  3. Add to Viewport
  4. Set Input Mode UI Only(Player Controller / In Widget to Focus にウィジェット参照)
  5. Set Show Mouse Cursor (true)(Player Controller の関数)

5. ポーズメニュー(ゲーム中の Esc 開閉)

ゲーム本編で Esc キーを押したらポーズメニューを開く処理は、プレイヤーコントローラーのブループリントが置き場所として最適です。

入力アクションの設定

  1. Project Settings → Input → Action Mappings に PauseMenu を追加し、Esc キーをバインド
  2. プレイヤーコントローラーの BP で InputAction PauseMenu イベントを作る

開く処理

  1. Create Widget(Class: WBP_PauseMenu
  2. Add to Viewport
  3. Set Game Paused (true)(UGameplayStatics)
  4. Set Input Mode Game and UI
  5. Set Show Mouse Cursor (true)

閉じる処理(メニュー内の「再開」ボタン)

  1. Remove from Parent(自身のウィジェット参照)
  2. Set Game Paused (false)
  3. Set Input Mode Game Only
  4. Set Show Mouse Cursor (false)

6. 入力モードとマウスカーソル

UI のクリック可否やキャラクター移動可否は、Set Input Mode 系の関数で切り替えます。

関数用途
Set Input Mode UI Onlyメインメニューなどゲーム入力を完全に止めたいとき
Set Input Mode Game and UIポーズメニュー / インベントリ。両方の入力を受け取る
Set Input Mode Game Only通常プレイ。マウスカーソルを隠す
Set Show Mouse Cursorマウスカーソルの表示/非表示

7. よくあるトラブル

症状原因と対処
ボタンが押せないSet Input Mode が Game Only のまま / マウスカーソル非表示 / Z オーダーで別ウィジェットが上に
2 重に開く開く処理にトグル制御が無い。ウィジェット参照を変数に保持して Is Valid で判定
ポーズ中にアニメが動くそのアニメ / コンポーネントが Tick when Paused になっている。普通は Off
レベル遷移後に UI が残るOpen Level 前に Remove from Parent または Remove All Widgets
キーが効かなくなるUI Only に切り替えたまま閉じていない

8. C++ で同じことをする場合

// 例: PlayerController.cpp
void AMyPlayerController::ShowPauseMenu()
{
    if (PauseMenuClass)
    {
        UUserWidget* W = CreateWidget<UUserWidget>(this, PauseMenuClass);
        if (W)
        {
            W->AddToViewport();
            UGameplayStatics::SetGamePaused(this, true);
            bShowMouseCursor = true;
            FInputModeGameAndUI Mode;
            Mode.SetWidgetToFocus(W->TakeWidget());
            SetInputMode(Mode);
        }
    }
}

まとめ

  1. ウィジェットブループリントで UI をデザイン
  2. 各ボタンの OnClicked にゲーム遷移/設定表示/終了を結線
  3. Create Widget → Add to Viewport で画面に出す
  4. Set Input Mode と Show Mouse Cursor を必ずペアで切り替え
  5. ポーズメニューは Set Game Paused で時間を止める

関連

  • UMG / Widget Blueprint — UE5 の UI システム
  • Create Widget / Add to Viewport — UI の表示
  • Set Input Mode — 入力モード切替
  • Open Level / Quit Game — レベル遷移とゲーム終了
  • Set Game Paused — ゲームの一時停止
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 床の上に乗ったらイベントを発生させる方法
  2. OverlapAllDynamicとOverlapAllの違い
  3. タイトル画面を作る方法
  4. サードパーソンテンプレートでのキャラクター表示の仕組みと非表示にする方法
  5. ボタンに文字を記載する方法
  6. Event ActorBeginOverlapとOn Component Begin Overlapの違い
  7. キャラクターに特定のオブジェクトとの当たり判定を付ける
  8. 特定のオブジェクトに触れたとき、キャラクターが倒れるようにする
  9. 動いているオブジェクトに静止しているキャラクターが当たり判定を持たない原因と解決方法
  10. 「On Component Hit」に「Cast To ~」で複数のクラスを指定する方法
  11. Blenderファイルをインポートする方法
  12. 鏡を作成する方法
  13. レベルブループリントでキャラクターの出現を設定する方法
  14. サードパーソンテンプレートにおけるキャラクター出現の定義
  15. アイテムに近づいたらボタンを押してイベントを発火させる方法
  16. 画面の中央にメッセージを表示する方法
  17. どこからでも呼び出せるカスタムイベントを作成する方法
  18. カスタムイベントに引数を追加する方法
  19. 「Get Overlapping Actors」から特定のクラスの場合のみ処理を実行する方法
  20. オブジェクトに近づいている間だけメッセージを表示する方法
  21. PCの画面を操作するUIを作る方法
  22. コンテンツブラウザに画像を追加する方法
  23. SetInputMode_UIOnlyを取り消す方法
  24. 特定の画像の上にマウスカーソルを置いたら手マークにする方法
  25. オブジェクトがアウトライナーで選択できない原因と解決策
  26. PlayerStartを作成する方法
  27. メニュー画面を作成して開く方法
  28. 「Esc」キーを押してメニュー画面を開く方法
  29. イベントの「On Clicked」と「On Pressed」の違い
  30. 「Set Input Mode」の種類と使い方
  31. 「Set Game Paused」の使い方と詳細解説
  32. Motion Matchingとは?
  33. 「GameMode」と「GameModeBase」の違い
  34. マップに配置したTargetPointを取得する方法
  35. TargetPointにタグをつけて取得する方法
  36. Spawnしたインスタンスがイベントを実行する方法
  37. 特定の時間ごとに処理を実行する方法
  38. 数値をランダムで出力する方法
  39. ThirdPersonテンプレートでキャラクターの移動を歩くように変更する方法
  40. MaxWalkSpeedを変更する方法
  41. しゃがむ動作を導入する方法
  42. キャラクターのアニメーションを設定する方法
  43. 導入済みのプラグインを確認する方法
  44. Motion Matchingの導入と必要なプラグイン
  45. プレイヤーを非表示にする方法
  46. カメラを傾ける角度を制限させる方法
  47. 配列からランダムに重ならない要素を特定の数取得する方法
  48. カメラの映す画面に文字やエフェクトを付ける方法
  49. キャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題の解決方法
  50. プライマリーデータアセットを活用する方法
  51. プレイヤーのHPといった変数を定義する最適な場所
  52. カメラに映った画面をスクリーンショットとして保存する方法
  53. ゲーム内のカメラ映像を保存して再表示する方法
  54. HighResShot を使って高解像度の画像を保存する方法(UE5)
  55. HighResShotで保存した画像のファイル名を取得する方法
  56. SceneCapture2DとFrameGrabberの画像保存方法の比較
  57. SceneCapture2Dを使用して画像を保存・取得する方法
  58. HighResShotとTake High Res Screenshotの違い
  59. ゲーム終了ボタンを作成する方法
  60. 「Save Game To Slot」の戻り値がfalseになる問題の解決方法
  61. 画面上にメッセージを指定された時間表示させる方法
  62. シェーダコンパイル時間を短縮する方法
  63. 「Take High Res Screenshot」実行時に「シェーダをコンパイル」に長時間待たされる問題とその解決策
  64. データベースを活用する方法
  65. UE5.5がインストールされた環境にUE5.4を追加で導入する方法
  66. World PartitionとWorld Compositionの違い
  67. オープンワールドテンプレートとは?
  68. ポーンをスポーンさせても視点を切り替えない方法
  69. キャラクター同士がすり抜けてしまう問題の解決方法
  70. キャラクターの外見を動的に変更
  71. World Partitionでインスタンスが「アンロード済み」になる問題
  72. データ アセットとデータ テーブルの違い
  73. コンポーネントイベントグラフ内で親クラスの変数にアクセスする方
  74. エディターのソースコードの自動保存の頻度を高める方法
  75. SpawnActorでSpawn Transform Rotationが反映されない理由
  76. ミニマップを表示しポーンの位置を反映する方法
  77. RInterp ToとVInterp Toの違い
  78. 毎秒実行するイベントの定義方法
  79. Niagara のエフェクトにコリジョンを持たせる方法
  80. 「Overlap」と「Hit」の違い
  81. OverlapはあるがHitがない原因
  82. Overlapした位置の座標を取得する方法
  83. ブループリントでレベル間のパラメータを受け渡す方法

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