【Unreal Engine】UE5の設定画面:Game User Settingsで解像度・画質・音量を変える

作成: 2026-07-20

UE5の設定画面をGame User Settingsで作る手順を図解。解像度とウィンドウモードの切り替え、Scalabilityによる画質段階、Apply SettingsとSave Settingsの役割の違い、そして音量だけ別経路になる理由まで。

タイトル画面に「設定」ボタンを置くところまでは作れた。ただ、解像度をどこに保存すればいいのか分かりません。SaveGameのクラスを作って解像度と画質を書き出し、起動時に読み戻して適用する。そこまで設計してから作り始める人も多いはずです。

UEには、そのための専用クラスが最初から用意されています。 Game User Settings です。解像度・ウィンドウモード・画質・VSync・フレームレート上限を保持し、ファイルへの保存と起動時の読み込みまで自分で行います。この記事では、Game User Settingsで扱える項目と、Apply SettingsSave Settings という2つの呼び忘れやすいノード、そして音量だけが別経路になる理由を解説します。

解像度・画質・音量の3項目が並んだ設定画面と、その値を受け取るGame User Settingsのイメージ

この記事でわかること

  • 画面まわりの設定は Game User Settings が最初から持っている
  • 解像度と 3つのウィンドウモード の切り替え方
  • 画質は Scalability の段階で指定する
  • Apply Settings を呼ばないと反映されず、Save Settings を呼ばないと次回に残らない
  • 音量だけはGame User Settingsの外側 にある
  • 実践: 解像度・画質・音量を変えられる設定画面

Sponsored

設定の置き場所はもう用意されている

セーブデータを自分で設計するとき、解像度や画質をそこへ入れたくなります。ただ、この2つには扱いにくい性質があります。

  • セーブスロットに紐づかない: 「スロット1は1920×1080、スロット2は1280×720」という作りには意味がありません。設定はプレイヤー個人のもので、進行データとは寿命が違います
  • 起動直後に必要になる: タイトル画面を出す時点でもう反映されていてほしい値です。セーブデータの読み込みを待てません

UEはここを分けています。進行データは SaveGame 、画面まわりの設定は Game User Settings です。

左は自前SaveGameに全部詰め込む図、右は進行データと画面設定が別のファイルに分かれている図の対比

Blueprintから触るには Get Game User Settings ノードを呼びます。引数はなく、戻り値の Game User Settings オブジェクトに対して各ノードを繋いでいきます。どのBlueprintからでも呼べて、ゲーム全体で同じ1つを指します。

扱える項目は、おおむね次のとおりです。

設定書き込むノード読み出すノード
解像度Set Screen ResolutionGet Screen Resolution
ウィンドウモードSet Fullscreen ModeGet Fullscreen Mode
画質(一括)Set Overall Scalability LevelGet Overall Scalability Level
画質(個別)Set Shadow Quality など項目ごとGet Shadow Quality など
垂直同期Set VSync EnabledIs VSync Enabled
フレームレート上限Set Frame Rate LimitGet Frame Rate Limit

ここに 音量が無い ことに気付いてください。この点は後の節で扱います。

保存先はプロジェクトの外、ユーザーごとの領域にある GameUserSettings.ini です。Windowsのパッケージ版なら %LOCALAPPDATA%\<プロジェクト名>\Saved\Config\Windows\GameUserSettings.ini 、エディタでの動作確認中はプロジェクトの Saved/Config/WindowsEditor/GameUserSettings.ini を見ています。 確認用とパッケージ版でファイルが別なので、エディタで設定した内容はパッケージ版には引き継がれません。

Sponsored

解像度とウィンドウモード

解像度は Set Screen Resolution で指定します。ピンは Resolution の1つで、型は Int Point (XとYを持つ整数の組)です。

ウィンドウの出しかたは Set Fullscreen Mode で、In Fullscreen Mode に3つのうち1つを渡します。

Fullscreen・Windowed Fullscreen・Windowedの3つを、画面の占め方の違いで並べた図
モード見え方特徴
Fullscreen画面全体を占有する指定した解像度がディスプレイ側に適用される。切り替えに一瞬かかる
Windowed Fullscreen画面全体に見えるが枠なしウィンドウ他アプリへの切り替えが速い。 多くのPCゲームの既定
Windowed通常のウィンドウ解像度がそのままウィンドウの大きさになる

迷ったら Windowed Fullscreen を既定にしておくと、切り替え時のちらつきや解像度の取り違えで困る場面が減ります。

選択肢そのものは、環境に合わせて作ります。 Get Supported Fullscreen Resolutions ノードが、そのディスプレイで使える解像度を Int Point の配列 で返します(戻り値のBooleanは取得に成功したかどうかです)。

ノード返すもの向いている用途
Get Supported Fullscreen Resolutionsフルスクリーンで使える解像度の配列フルスクリーン前提の選択肢
Get Convenient Windowed Resolutionsいま繋がっている画面に収まるウィンドウ解像度の配列ウィンドウモード向けの選択肢

固定のリストを自分で書き並べると、ウルトラワイドや4Kの環境で選べない、あるいは画面より大きい解像度が並ぶ、という形で必ず破綻します。 選択肢は取得したものから作ってください。

注意: これらのノードは 接続されているディスプレイの都合を返します 。環境によっては空に近い配列が返ることもあるため、要素数が0だったときに既定の1つを入れておくと安全です。

画質はScalabilityの段階で指定する

UEの画質設定は Scalability という仕組みでまとまっています。影・テクスチャ・ポストプロセス・視距離といった項目が個別にあり、それらをまとめて段階で切り替えられます。

一括で変えるのが Set Overall Scalability Level です。Value に整数を渡します。

Overall Scalability Levelの段階を1本のつまみで動かすと、影・テクスチャ・視距離などの個別項目がまとめて動く図
Value段階
0Low(低)
1Medium(中)
2High(高)
3Epic(最高品質)
4Cinematic(映像制作向け)

ゲームの設定画面では、 0〜3の4段階を出しておけば十分 です。Cinematic は映像制作用の段階で、実時間で遊ぶには重すぎます。

個別の項目は、それぞれ専用のノードで変えられます。

ノード対象
Set Shadow Quality
Set Texture Qualityテクスチャ
Set View Distance Quality表示距離
Set Post Processing Qualityポストプロセス
Set Anti Aliasing Qualityアンチエイリアス
Set Visual Effect Qualityエフェクト

ここに1つ、UIを作るときに引っかかる仕様があります。 Get Overall Scalability Level は、個別の項目がバラバラに設定されていると -1 を返します。 「影だけ低くして他は高い」という状態には、対応する段階が存在しないためです。

そのため、設定画面のドロップダウンに現在値を反映するときは、 -1 が返ってきた場合の扱いを決めておく必要があります。「カスタム」という選択肢を1つ足すか、単純にどこも選択されていない状態にしておくのが素直です。

補足: どの段階を初期値にするかを自動で決めたい場合は、 Run Hardware Benchmark で計測し、 Apply Hardware Benchmark Results を呼ぶ方法があります。初回起動時に1回だけ走らせて、以後はプレイヤーの選択を尊重する形にしてください。毎回走らせると、起動のたびに設定が上書きされます。

Sponsored

ApplyとSaveは別の仕事

ここが、この記事でいちばん覚えて帰ってほしい部分です。設定画面が動かない原因は、ほぼこの2つのどちらかに集約されます。

Set Screen ResolutionSet Overall Scalability Level も、 Game User Settingsの中の値を書き換えるだけ です。画面には何も起こりません。

値を書き込む・Applyで画面へ反映する・Saveでファイルへ書き出す、の3段階を横に並べた図
ノードやること呼ばないとどうなるか
Set 〜 各種値を書き込むそもそも何も変わらない
Apply Settings書き込んだ値を 今の画面へ反映する選んでも画面が変わらない
Save Settings値を ファイルへ書き出す再起動すると元に戻る

Apply Settings には b Check for Command Line Overrides というBooleanのピンがあります。コマンドライン引数(-ResX= など)が指定されていた場合に、そちらを優先するかどうかです。設定画面から呼ぶときは、プレイヤーの選択をそのまま通したいので false を渡します。

適用のノードは3つに分かれています。

ノード反映する範囲
Apply Settingsすべて
Apply Resolution Settings解像度・ウィンドウモード・VSync
Apply Non Resolution Settings画質などそれ以外

画質だけを変えたときに Apply Non Resolution Settings を使うと、ウィンドウの再構成が起きないぶん切り替えが滑らかです。ただ最初のうちは、 「適用」ボタンで Apply SettingsSave Settings の2つを順に呼ぶ 形に統一しておくほうが、抜けが出ません。

(適用ボタン On Clicked)
  → Get Game User Settings
  → Apply Settings(b Check for Command Line Overrides: false)
  → Save Settings

読み込みは自動です。ゲーム起動時にエンジンが GameUserSettings.ini を読んで反映するので、 Load Settings を自分で呼ぶ必要は通常ありません。設定画面側でやることは、 現在値をUIへ表示する ことだけです。

音量だけは別の経路にある

設定画面に3つ並べるなら、解像度・画質・音量です。ところが 音量はGame User Settingsに含まれていません

音量はレンダリングの設定ではなく、オーディオのミキシングの一部だからです。UEでは Sound Class で音をグループに分け、 Sound Mix でそのグループの音量を変えます。

決めたいこと使うもの
画面まわりの設定Game User Settings
どのグループの音かSound Class
そのグループを今どれだけ鳴らすかSound MixSet Sound Mix Class Override

つまり設定画面の音量スライダーは、次の2つを別々に面倒を見ることになります。

  • 反映: Set Sound Mix Class Override を呼ぶ
  • 保存: SaveGameなど、自分で用意した保存先へ書く

Sound ClassとSound Mixの組み立て方そのものは 3Dサウンドとミキシングの記事 にまとめてあります。仕組みはそちら、UIから繋ぐ部分はこの記事、という分担です。保存の受け皿には セーブ/ロードの記事 のSaveGameクラスがそのまま使えます。

Sponsored

実践:解像度・画質・音量の設定画面を作る

アクションゲームのタイトル画面、探索ゲームのポーズメニュー、シミュレーションの初回起動時。 設定画面はジャンルを問わず、公開するなら必ず求められます。 ここでは3項目だけの最小構成を、再起動しても値が残るところまで組みます。

完成形

ドロップダウンで 1280 x 720 を選んで「適用」を押すと、ウィンドウがその大きさに変わります。画質を「低」にすると影が粗くなります。一度アプリを終了して起動し直しても、選んだ解像度と画質のままで立ち上がります。

解像度ドロップダウン・画質ドロップダウン・音量スライダー・適用ボタンが並んだ設定画面と、適用後にウィンドウが小さくなる様子の図

再現条件

Third Person テンプレート で新規プロジェクトを作り、次を用意します。音量部分は 3Dサウンドの記事 と同じ構成です。

種類名前設定
Widget BlueprintWBP_Settings下のレイアウトで作る
Sound ClassSC_Master作るだけ
Sound MixSM_UserAudioSound Class Effects に1件(SC_Master / Volume Adjuster 1.0 / Apply to Children true)
Sound Wave任意のBGMLooping オン、 Sound ClassSC_Master

WBP_Settings には、Canvas Panelの中央にVertical Boxを置き、次の4つを入れます。 4つとも Is Variable にチェック を入れてください。

ウィジェット名前初期設定
Combo Box (String)Combo_Resolution選択肢は空のまま(実行時に流し込む)
Combo Box (String)Combo_QualityDefault Options低 / 中 / 高 / 最高 の4つを順に登録
SliderSlider_VolumeMin Value 0.0Max Value 1.0Value 1.0
ButtonButton_Apply中にTextを入れて「適用」

変数(WBP_Settings に作る)

変数名初期値用途
ResolutionListInt Point の配列ドロップダウンと同じ並び順で解像度を保持する

ドロップダウンには文字列しか入れられないため、対応する Int Point同じ順番の配列 で持っておき、選択された番号で引くのがいちばん確実です。文字列を 1280 x 720 から数値へ戻す処理は不要になります。

注意: エディタ内プレイ(PIE)では、解像度とウィンドウモードの変更が画面に現れません。 エディタのビューポートの中で動いているためです。確認は必ず Play の横のドロップダウンから Standalone Game を選んで行ってください。画質と音量はPIEでも変わります。

ステップ1:起動時に選択肢と現在値を用意する

WBP_SettingsEvent Construct に組みます。ここでやることは2つです。 選択肢を作ること と、 今の設定をUIへ反映すること です。

Event Constructから解像度取得・ForEachLoopでの選択肢追加・現在値の反映へ流れるノードグラフ図
Event Construct
  → Get Supported Fullscreen Resolutions ── Resolutions(Int Point の配列)─┐
  → Set ResolutionList  ←──────────────────────────────────────────────────┘
  → For Each Loop(Array = ResolutionList)
       Loop Body:
         → Int Point の X / Y を取り出す(ピンを右クリック → Split Struct Pin)
         → Append("1280" + " x " + "720" の形に組む)
         → Add Option(Target = Combo_Resolution, Option = 組んだ文字列)
       Completed ↓
  → Get Game User Settings
  → Get Overall Scalability Level ── Return Value ─┐
  → Branch(Return Value >= 0)                     │
      True → Set Selected Index(Target = Combo_Quality, Index = ←┘)
      False →(何もしない。個別設定でカスタム状態なので選択なしのまま)
  → Push Sound Mix Modifier(In Sound Mix Modifier: SM_UserAudio)

最後の Push Sound Mix Modifier を忘れないでください。 Sound Mixがアクティブでないと、音量のオーバーライドは何も起こしません。

Combo_Quality の選択肢を 低 / 中 / 高 / 最高 の順に並べたのは、 Get Overall Scalability Level が返す 03 をそのまま Set Selected Index に渡せるようにするためです。

ステップ2:音量はその場で反映する

音量スライダーだけは、「適用」を待たずに動かした瞬間に反映させます。耳で確かめながら調整する項目だからです。

デザイナー上で Slider_Volume を選び、詳細パネル下部のイベント一覧から On Value Changed+ を押します。

Event On Value Changed(Slider_Volume)── Value ─┐
  → Set Sound Mix Class Override                  │
      In Sound Mix Modifier : SM_UserAudio        │
      In Sound Class        : SC_Master           │
      Volume                : ←──────────────────┘
      Pitch                 : 1.0
      Fade In Time          : 0.1
      Apply to Children     : true

Fade In Time の既定値は 1.0 秒です。スライダーに使うと反応が1秒遅れて感じるので、 0.1 まで下げます。

ステップ3:適用ボタンで書き込み・反映・保存を行う

Button_ApplyOn Clicked に、この記事の要点をそのまま並べます。

On ClickedからSet Screen Resolution・Set Fullscreen Mode・Set Overall Scalability Level・Apply Settings・Save Settingsへ直列につながるノードグラフ図
Event On Clicked(Button_Apply)
  → Get Game User Settings ── Return Value を以降の Target に使う

  → Get Selected Index(Target = Combo_Resolution)── Return Value ─┐
  → Get(Target = ResolutionList, Index = ←──────────────────────┘)
  → Set Screen Resolution
        Resolution : ← Get の結果(Int Point)

  → Set Fullscreen Mode
        In Fullscreen Mode : Windowed Fullscreen

  → Get Selected Index(Target = Combo_Quality)── Return Value ─┐
  → Set Overall Scalability Level
        Value : ←────────────────────────────────────────────────┘

  → Apply Settings
        b Check for Command Line Overrides : false

  → Save Settings

Apply SettingsSave Settings が、この記事のすべてです。 上4つの Set 〜 は値を書き込むだけで、画面には何も起こりません。 Apply Settings が反映し、 Save Settings がファイルへ書き出します。

なお、この構成では音量が保存されません。3項目とも残したいなら、 Save Settings の後ろに SaveGame への書き出しを1本足し、 Event Construct で読み戻して Slider_VolumeSet Value してください。 画面設定はエンジンが、音量は自分が持つ という切り分けになります。

ステップ4:画面に出してマウスを使えるようにする

BP_ThirdPersonGameModeEvent BeginPlay に足します。

Event BeginPlay
  → Create Widget(Class = WBP_Settings)→ Add to Viewport
  → Get Player Controller → Set Show Mouse Cursor(true)

実際のゲームではポーズメニューから開くことになります。その繋ぎ方は ポーズメニューの記事 にあります。設定画面へ切り替えるときは、ポーズメニューを Remove from Parent せず Set VisibilityCollapsed にしておくと、戻るボタンが単純になります。

確認する

Play の横のドロップダウンから Standalone Game を選んで起動し、次の順に確かめてください。

  1. 解像度で 1280 x 720 を選び、「適用」を押す。 ウィンドウが即座にその大きさへ縮みます
  2. 画質を「低」にして「適用」を押す。 影のふちが粗くなり、遠くの草木の描画が簡略になります
  3. 音量スライダーを0へ動かす。 ボタンを押さなくても、その場でBGMが消えます
  4. ウィンドウを閉じ、もう一度 Standalone Game で起動する。 1280 x 720 の低画質で立ち上がれば成功です
  5. Save Settings のノードを外して、1と4をもう一度やる。 今度は元の解像度に戻ります

4と5を続けてやると、 Save Settings が何をしているかが1回で腑に落ちます。

うまくいかないときの切り分けです。

  • 押しても画面が変わらないApply Settings を繋いでいない
  • エディタでは何も起きないが、値は変わっている → PIEの仕様。Standalone Game で確認する
  • 再起動すると元に戻るSave Settings を呼んでいない
  • ドロップダウンが空のままGet Supported Fullscreen Resolutions の結果が0件。 Get Convenient Windowed Resolutions も試し、それでも空なら既定値を1件入れる
  • 選んだ解像度と違うサイズになるResolutionList の並び順とドロップダウンの並び順がずれている。同じループの中で両方を作る
  • 画質のドロップダウンに何も選択されていないGet Overall Scalability Level-1 を返している。個別の項目がバラバラの状態
  • 音量スライダーを動かしても何も起きないPush Sound Mix Modifier を呼んでいない、またはBGMに Sound Class を割り当てていない

ポイントは2つです。

  • 書き込み・反映・保存は別のノード: Set 〜 は値を置くだけです。 Apply Settings で今の画面へ、 Save Settings でファイルへ。設定画面が動かないときは、この3段のどこで止まっているかを先に切り分けてください
  • 選択肢は環境から取得する: 解像度を固定のリストで書き並べると、ウルトラワイドや4Kの環境で必ず破綻します。 Get Supported Fullscreen Resolutions の結果からドロップダウンを作り、対応する Int Point を同じ並びの配列で持っておくのが最も壊れにくい形です

ゲームパッドでも操作できるようにするなら、次は フォーカス管理の記事 が続きになります。

Sponsored

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

設定画面まわりは、症状から原因を辿れる形になっています。

症状見るところ
何を選んでも画面が変わらないApply Settings を呼んでいるか
反映はされるが再起動で戻るSave Settings を呼んでいるか
エディタでだけ解像度が変わらないPIEの仕様。Standalone Game で確認する
パッケージ版だけ既定の解像度で起動するエディタ用とパッケージ用で GameUserSettings.ini が別。パッケージ版で1回設定し直す
設定がおかしくなって直せないGameUserSettings.ini を削除すると初期状態に戻る。または Set to DefaultsApply Settings
画質を上げても見た目が変わらない個別の項目が別途固定されていないか。 Get Overall Scalability Level-1 なら混在状態

GameUserSettings.ini はテキストファイルなので、開けば実際に何が保存されたかを目で確認できます。 「保存されていないのか、読み込めていないのか」を1回で切り分けられる ので、詰まったらまずこのファイルを見てください。

おまけ:先に知っておくと良いこと

  • フレームレート上限の0は「無制限」: Set Frame Rate Limit0.0 を渡すと上限なしになります。30 60 120 0 のような選択肢を用意するのが定番です。なお実行中の一時的な確認だけなら、コンソールで t.MaxFPS を叩くほうが速く済みます
  • VSyncとフレームレート上限は別物: Set VSync Enabled はディスプレイのリフレッシュレートに同期して画面の裂け(ティアリング)を防ぐ設定で、上限値の指定ではありません。両方を選択肢として並べておくと親切です
  • Set to Defaults は保存までしない: 「初期設定に戻す」ボタンを作るときは、 Set to Defaults の後に Apply SettingsSave Settings を続けてください。ここでも3段の話は同じです
  • 操作キーの設定は別の仕組み: キーの割り当て変更はGame User Settingsではなく、Enhanced Input側で扱います。設定画面にタブを分けるなら、画面・音・操作の3つに分かれることになります
  • 重い原因が画質とは限らない: 「低」にしても改善しないときは、描画ではなくBlueprintの処理やTickが原因のことがあります。先に計測してください(→ 統計コマンドの記事LODとカリングの記事
  • パッケージ後の初回起動を確認する: 設定画面の不具合は、パッケージ版でしか出ないものが少なくありません。解像度が絡む機能は、 必ず一度パッケージして確かめて ください(→ パッケージ化の記事

まとめ

  • 画面まわりの設定は Game User Settings に置き場所がある。SaveGameへ自分で詰め込む必要はない
  • 触るのは Get Game User Settings から伸びる Set 〜 のノード群。解像度は Int Point 、画質は 0〜3の段階
  • Apply Settings で反映、Save Settings で保存。 この2つの呼び忘れが不具合の大半
  • 選択肢は Get Supported Fullscreen Resolutions から作る。固定リストは環境で破綻する
  • 音量はGame User Settingsの外 。Sound Class + Sound Mixで変え、保存は自分で持つ

いま作っているゲームで、プレイヤーが最初に触りたくなる設定はどれでしょうか。その1項目だけでも動く設定画面があると、完成度の印象が大きく変わります。