【Unreal Engine】UE5の設定画面:画面サイズ・画質・BGM音量を変えて保存する

作成: 2026-07-20最終更新: 2026-09-06

UE5で画面サイズ・画質・BGM音量を変更する設定画面を作ります。Game User Settingsの適用と保存、音量用SaveGameの読み戻しを整理し、起動し直しても設定が残るところまで説明します。

ゲームのウィンドウを少し小さくしたい。動作が重いので画質を下げたい。BGMはもう少し控えめにしたい。設定画面は、プレイヤーが自分の遊びやすい状態を選ぶための場所です。

ただし、選択欄やスライダーを置いただけでは、ゲームの設定は変わりません。UIで選んだ値を反映し、次に起動したときにも戻せるようにするところまでが、設定画面の仕事です。

この記事では、画面まわりを受け持つGame User Settingsと、BGM音量を保存するSaveGameを使い、3項目の小さな設定画面を作ります。

画面サイズ・画質・BGM音量を選び、次にゲームを開いても選んだ状態を引き継ぐ設定画面のイメージ

この記事でわかること

  • 画面設定と音量で、保存先を分ける理由
  • SetとApplyで何が変わるのか
  • Game User Settingsの適用と保存の手順
  • 起動し直しても設定が残ることの確かめ方

この記事で作るもの

  • ウィンドウのサイズと画質を選び、「適用・保存」で反映する
  • BGM音量はスライダーで聞き比べ、同じボタンで保存する
  • ゲームを起動し直して、画面設定と音量が戻ることを確かめる

UE5のBlueprintで変数・関数を作ったことがあり、UMG入門のWidget配置とボタンイベントが分かる方を想定しています。実践はWindowsのStandalone Gameで、起動時から設定画面を表示する練習用です。

Sponsored

画面設定と音量は、保存先を分ける

Game User Settingsは、解像度・表示モード・画質などを持つ、UE標準の設定用オブジェクトです。Blueprintでは Get Game User Settings で取得します。新しく作る必要はなく、返ったオブジェクトを各設定ノードのTargetへ渡します。

画面設定を保存すると、通常は GameUserSettings.ini という設定ファイルへ書き込まれます。ゲーム側は起動時にその設定を読み込みます。解像度用のSaveGameクラスや、自前のファイル読み書きを一から用意せずに済みます。

一方、標準のGame User Settingsには、今回使う「BGM音量」の項目はありません。こちらは自分で変数を用意し、SaveGameへ保存します。SaveGameは、保存したい値を自分で決められる入れ物です。

今回残したいもの反映する相手保存先
ウィンドウのサイズ・画質Game User SettingsGameUserSettings.ini
BGM音量再生中のAudio Component音量用のSaveGame

同じ「適用・保存」ボタンから、2つの保存処理を呼びます。見た目は1つの設定画面でも、すべてを同じ場所に保存する必要はありません。

Audio Componentは、再生中の音を操作する部品です。今回のBGMも、音量を変えたいときはこの部品を指定します。

1つの適用・保存ボタンから、画面設定はGame User Settings、BGM音量はSaveGameへ分かれる保存経路

進行データにもSaveGameを使えますが、音量は冒険のセーブスロットとは別にすると扱いやすくなります。新しいゲームを始めても、プレイヤーが選んだ音量を引き継げるためです。

SetとApplyで、何が変わるのか

画面設定は、値を指定する段階と、その値をゲームへ反映する段階に分かれます。

ノード行うこと
Set Screen Resolution などGame User Settingsが持つ設定値を変更する
Apply Settings設定をゲームへ適用し、保存も行う
Save Settings設定値を保存する。Apply Settingsの中でも自動で呼ばれる

たとえば、Set Screen Resolutionへ1280×720を渡すだけでは、ウィンドウをそのサイズへ切り替える処理はまだ終わっていません。最後にApply Settingsを呼びます。

Apply Settingsは、適用だけでなく保存まで行います。 その直後にSave Settingsを追加する必要はありません。Apply Settingsの公式仕様Save Settingsの公式仕様

今回は画面設定を選択欄に置いておき、「適用・保存」を押したときにSetとApplyをまとめて呼びます。選ぶ途中で何度も画面が切り替わるのを避けられます。

Setで指定した解像度をApply Settingsへ渡し、ゲームへの反映とファイルへの保存を両方行う関係

画面サイズと画質の選び方

解像度だけでなく、表示モードもそろえる

解像度は、描く画面の横と縦の画素数です。1280×720なら、横1280・縦720。Blueprintでは整数2つをまとめた Int Point を使い、Xへ横、Yへ縦を入れます。

同じ解像度でも、表示モードによって見え方が変わります。

モード画面の使い方
Windowed枠のあるウィンドウで表示する。今回のサイズ変更に使う
Windowed Fullscreenデスクトップ全体を使う、枠のないウィンドウ
Fullscreen全画面表示。対応する解像度や切り替え方は実行環境にもよる

今回見たいのは、ウィンドウを800×600と1280×720へ切り替えたときの違いです。そのため、サイズを変更するときに Set Fullscreen ModeWindowed を指定します。Windowed Fullscreenのまま、画面の枠が小さくなることを期待しないようにします。

Windowedでは枠の大きさが変わり、Windowed Fullscreenではデスクトップ全体を使う表示の違い

画質は、複数の項目をまとめて変えられる

Scalabilityは、影や描画距離などの品質を調整し、見た目と処理負荷の釣り合いを取る仕組みです。Set Overall Scalability Level を使うと、複数の項目をまとめて切り替えられます。

一括画質を変えると、影・テクスチャ・視距離・ポストプロセスなどの段階がまとめて変わるイメージ
段階今回の選択肢
0Low
1Medium
2High
3Epic最高
4Cinematic今回は追加しない

一方、Get Overall Scalability Level は、個別に調整された設定では -1 を返すことがあります。これはエラーではなく、「全項目が同じ段階にそろっていない」という意味です。

そこで今回は、選択欄の先頭に「変更しない」を置きます。画質を選ばなければ、現在の個別設定やCinematicもそのままです。音量だけを保存したつもりで、画質まで一括変更することを防げます。

Sponsored

実践1:設定画面を表示する

練習用の画面を作る

Third Personテンプレートのレベルを別名 L_SettingsPractice で保存します。ウィンドウの大小を試せるよう、デスクトップは1600×900以上を目安に、候補のウィンドウが収まる環境で進めます。収まらない場合は、後のサイズ候補も小さくしてください。

User Widgetを親に WBP_SettingsPractice を作ります。DesignerにCanvas Panelを置き、その下へ次の部品を並べます。

Canvas Panel
└─ Size Box
   └─ Border
      └─ Vertical Box
         ├─ Text「設定」
         ├─ Text「ウィンドウサイズ」
         ├─ Combo Box (String)「ResolutionCombo」
         ├─ Text「画質」
         ├─ Combo Box (String)「QualityCombo」
         ├─ Text「BGM音量(動かすと試聴)」
         ├─ Slider「VolumeSlider」
         ├─ Button「ApplyButton」
         │  └─ Text「適用・保存」
         ├─ Text「CurrentSettingsText」
         └─ Text「StatusText」

Size BoxのCanvasスロットはAnchorsを中央、Alignmentを 0.5 / 0.5、Positionを 0 / 0、Auto Sizeをオンにします。Size BoxはWidth Overrideをオンで 520、Height Overrideはオフ。Borderは白、Paddingは 24 にします。

文字は濃紺、見出しはFont Size 28、ほかのTextは 18。Vertical Box内の各部品は横Fill、上下Padding 4 とします。ApplyButton内のTextは中央揃え、Padding 10。最後の2つのTextはAuto Wrap Textをオンにして、長い文字を折り返します。初期の表示文字は空にします。

ApplyButtonのStyleはNormalのTintを青にし、ボタン内のTextだけ白にします。2つのCombo BoxはFont Sizeを18、Foreground Colorを濃紺にします。

名前を付けた2つのCombo Box、Slider、Button、最後の2つのTextは、Is Variableをオンにします。これでグラフへドラッグし、値を読んだり表示を書き換えたりできます。

Canvas PanelからVertical Boxへ部品を重ね、幅520のメニューにラベルと操作部品を縦に並べる構成

図は処理まで組み終えたときの表示例です。今は最後の2つのTextが空でも構いません。

選択肢は、この順番で登録する

Combo Box (String)は、文字列の候補から1つ選ぶ部品です。DetailsのDefault Optionsへ、次の順で追加してください。両方ともSelected Optionは 変更しない にします。

IndexResolutionComboQualityCombo
0変更しない変更しない
1800 x 600
21280 x 720
3
4最高

Indexは、0から始まる候補の番号です。後で「2番目を選んだら800×600」と判断するため、この並びを使います。左列の「—」は候補として追加しません。

VolumeSliderはMin Valueを 0、Max Valueを 1、Valueを 0.5 にします。初期状態ではIs Enabledをオフにしておき、BGMの準備ができた後にオンへ戻します。

レベル開始時に表示する

L_SettingsPracticeのLevel Blueprintで、Event BeginPlayから次の順につなぎます。Get Player Controller のPlayer Indexは 0 です。

順番ノード接続・設定
1Create WidgetClass=WBP_SettingsPractice、Owning Player=Get Player ControllerのReturn Value
2Add to ViewportTarget=Create WidgetのReturn Value
3Set Input Mode UI OnlyPlayer Controller=Get Player Controller、In Widget to Focusは空、Mouse Lock=Do Not Lock
4Set Show Mouse CursorTarget=Get Player Controller、値=オン

白い実行線は表の順です。Get Player Controllerの青い出力は、表で指定した3か所へ分けてつなぎます。

レベル開始時に設定画面を作り、Return ValueをAdd to ViewportのTargetへ渡す接続

表示しただけでは操作できません。入力の向き先も変えます。

同じPlayer ControllerをUI OnlyとShow Mouse Cursorへ渡し、設定画面をマウスで操作できるようにする接続

この練習はマウスで設定画面を操作するため、Input ModeをUI Onlyにします。表示だけでなく入力先もUIへ切り替え、カーソルを出す、という組み合わせです。

「Play」の実行方法を Standalone Game にして開始します。エディタのビューポートから独立してゲームを動かす実行方法です。選択欄が開き、ボタンをクリックできれば、画面の準備はできています。ここではまだ、候補を選んでも画面設定は変わりません。練習を終えるときは、ゲームウィンドウを閉じます。

実践2:画面設定を反映する

ここからはWBP_SettingsPracticeのGraphを使います。

変数 VideoSettingsGame User Settings Object Reference 型、初期値Noneで作ります。参照は、後から同じ設定オブジェクトを指定するためのものです。

Event On Initializedから Get Game User Settings → Set VideoSettings の順に白い実行線をつなぎます。Get Game User SettingsのReturn Valueは、Set VideoSettingsの値へ渡します。On Initializedは、このWidgetの実体が初期化されるときに1回呼ばれます。今回の画面はレベル開始時に1つだけ作ります。

初期化イベントからGame User Settingsを取得し、その参照をVideoSettingsへ残す接続

図中の「次の図へ」につながる処理は、現在値の表示と音量の読み込みです。まずはここまで組み、各処理を作った後につなぎます。

適用処理を3段に分ける

引数なしの関数 ApplyPracticeVideo を作り、入口から Sequence をつなぎます。Add pinでThen 2まで増やします。

Sequenceは、Then 0につないだ処理を進めた後、Then 1、Then 2へ順に進むノードです。今回は待ち時間を挟む処理を使わないので、「サイズ → 画質 → 最後に適用」の順になります。

SequenceのThen 0でサイズ、Then 1で画質を設定し、Then 2で適用と保存へ進む順序

Then 0:選んだときだけ、ウィンドウサイズを変える

ResolutionComboのGetから Get Selected Index を取得します。その整数を Switch on Int のSelectionへ渡し、Then 0の白い線をSwitchへつなぎます。出力は0・1・2を用意します。

Switch on Intは、受け取った番号と同じ番号の実行出力へ進むノードです。今回は、選択欄の番号に応じてサイズの設定先を分けます。

Switchの出力つなぐ処理
0 / Default何もしない
1Set Screen ResolutionへMake Int Point(X=800、Y=600)→ Set Fullscreen Mode(Windowed)
2Set Screen ResolutionへMake Int Point(X=1280、Y=720)→ Set Fullscreen Mode(Windowed)

1側と2側に、それぞれSet Screen ResolutionとSet Fullscreen Modeを置きます。どちらのTargetもVideoSettingsです。Get VideoSettingsから青い線を伸ばして作ると、対象を間違えにくくなります。

0側へ何もつながなくても、Sequenceは次のThen 1へ進みます。何も選ばれていない場合の -1 などもDefaultへ入り、サイズ変更をせずに先へ進みます。

ResolutionComboの選択IndexをSwitch on Intへ渡し、1と2のときだけサイズ設定へ進む接続

図の右端は、各出力の行き先の説明です。「変更しない」というノードを作る必要はありません。

Switchの1から、800と600をMake Int PointでまとめてSet Screen Resolutionへ渡す接続

解像度と一緒に、ウィンドウの形式も指定します。

同じVideoSettingsへWindowedを指定し、ウィンドウの枠ごとサイズを変える接続

Then 1:画質を選んだ場合だけ、一括設定する

QualityComboからGet Selected Indexを取得し、In Range (Integer) へ渡します。Min= 1、Max= 4、Inclusive Min / Maxは両方オンです。「番号が1〜4に入っているか」を調べます。

選択Indexが1から4に入るかを調べ、BooleanをBranchへ渡す計算

Then 1からBranchへ進み、ConditionへIn RangeのBoolean出力を渡します。BooleanはTrue / Falseの2値で、ここでは「範囲に入っている/いない」を表します。

  • True:Set Overall Scalability Level を呼ぶ。Target=VideoSettings、Value=選択Indexから 1 を引いた整数
  • False:何もしない
Then 1からBranchへ進み、範囲内のTrueだけを画質設定へつなぐ実行の分岐

「低」はIndex 1ですが、UEへ渡す画質値は0です。この1つ分のずれを、整数の引き算で合わせます。「変更しない」は範囲外なので、Setを呼びません。

選択Indexから1を引いて画質値へ渡し、VideoSettingsを一括画質ノードのTargetへつなぐ接続

Then 2:まとめて適用・保存する

Then 2から Apply Settings を呼びます。TargetはVideoSettings、Check for Command Line Overridesはオフです。この入力は、起動時のコマンド指定を優先するかどうか。練習では画面で選んだ値を使います。

これで、サイズや画質を選んだ場合も、どちらも「変更しない」の場合も、最後に1回Apply Settingsへ進みます。Save Settingsは追加しません。

ボタンにつないで、小さく確かめる

DesignerのApplyButtonからOn Clickedを追加し、Apply Practice Video(Target=Self)を呼びます。その後へPrint Stringをつなぎ、Video settings applied と表示します。

コンパイル・保存してStandaloneで開始します。800×600と1280×720を交互に選び、「適用・保存」を押してください。ウィンドウの大きさが変われば、UIから画面設定までつながっています。

画質は「低」と「高」を切り替えます。影などの変化はシーンの内容で異なるため、見た目だけで判断せず、次の表示も用意しましょう。

今の設定値を画面に出す

引数なしの関数 RefreshPracticeStatus を作ります。Get VideoSettingsから、Get Screen ResolutionとGet Overall Scalability Levelを取得します。

Get Screen Resolutionの戻り値を Break Int Point でX・Yに分けます。画質の整数は、次のように表示名へ置き換えます。

  1. Get Overall Scalability Levelの値へ、整数の足し算で 1 を加えます。個別設定の-1が0、Lowの0が1になります。
  2. その値を Select ノードのIndexへつなぎます。Add pinで選択肢を6つに増やし、出力の型をTextにします。
  3. Option 0から順に 個別設定 / 低 / 中 / 高 / 最高 / Cinematic と入力します。

Selectは、番号に対応する値を1つ返すノードです。実行の行き先を分けるSwitchとは違い、ここでは表示する文字を選びます。

画質の値へ1を足し、個別設定からCinematicまでの6つの表示名をSelectで選ぶ接続

Format Text のFormatへ 設定値:{W} x {H} / 画質 {Q} と入力し、WへX、HへY、QへSelectのReturn Valueを渡します。Format Textは、文章の波括弧の場所へ値を埋めるノードです。

解像度を横と縦へ分け、画質の表示名と合わせて現在値の文章を作る接続

関数入口からCurrentSettingsTextの Set Text を呼び、In TextへFormat TextのResultを渡します。

作った表示文字をCurrentSettingsTextのSet Textへ渡す接続

RefreshPracticeStatusは、次の2か所から呼びます。

  • Event On InitializedのSet VideoSettingsの後
  • ApplyPracticeVideoのThen 2にあるApply Settingsの後
Then 2からApply Settingsで適用と保存を行い、その後に現在値の表示を更新する接続

起動時に候補が「変更しない」へ戻るのは、設定が消えたという意味ではありません。上の選択欄はこれから変える内容、下のTextは現在持っている設定値です。

Sponsored

実践3:BGM音量を変えて保存する

画面設定が動いたら、BGMを追加します。今回は、設定画面で流すBGM1本の音量を変えます。ゲーム全体のマスター音量ではありません。

1. 繰り返し鳴るBGMを用意する

用意したWAVファイルをコンテンツブラウザへドラッグして、Sound Waveとしてインポートします。そのアセットを右クリックしてCreate Cueを選び、できたSound Cueを SC_SettingsPracticeBGM と名付けます。Sound Cueは、どの音をどう再生するかを組むアセットです。

Sound Cueを開き、音声を指定したWave PlayerをOutputへつなぎます。Wave PlayerのDetailsで Loopingをオンにします。プレビューで繰り返し鳴ることを確かめて保存してください。

音量0からも戻せるよう、Sound Cueの設定でVirtualization Modeを Play When Silent にします。無音になっても再生を続ける設定です。あとでスライダーを0まで下げ、再び上げる操作も確かめます。

2. 音量を保存する入れ物を作る

SaveGameを親クラスにBlueprint SG_SettingsPracticeAudio を作ります。変数 BGMVolume をFloat型、初期値 0.5 で追加し、コンパイル・保存します。

Floatは、0.5のような小数を扱う型です。音量を0〜1の間で細かく変えるために使います。

WBP_SettingsPracticeにも、次の2変数を追加します。

変数初期値
AudioPreferencesSG_SettingsPracticeAudio Object ReferenceNone
PreviewAudioAudio Component Object ReferenceNone

AudioPreferencesは保存する値を持つ入れ物、PreviewAudioは実際に鳴っている音を操作するための参照です。同じ音量でも、保存する値と、今鳴らしているものを分けて扱います。

保存場所の名前は SettingsPracticeAudio、User Indexは 0 に統一します。ここでいうSlot Nameは、保存データを識別する名前です。保存時と読み込み時で1文字でも違うと、別のデータを探すことになります。

3. まず既定値を用意し、保存済みなら読み戻す

引数なしの関数 LoadPracticeAudioStartPracticeAudio を作り、いったんコンパイルします。

LoadPracticeAudioは、次の順で組みます。

  1. Create Save Game Object のSave Game ClassをSG_SettingsPracticeAudioにする。
  2. Return ValueをSet AudioPreferencesの値へつなぐ。白い実行線もCreateからSetへつなぐ。
  3. その後で Does Save Game Exist を呼ぶ。Slot Name=SettingsPracticeAudio、User Index=0。
  4. 実行出力をBranchへ、Return ValueをConditionへつなぐ。
既定値を持つSaveGameオブジェクトを作り、AudioPreferencesへ残す最初の接続

BranchのFalseでは、そのままStartPracticeAudio(Target=Self)を呼びます。初回は保存データがないので、先ほど作った既定値0.5を使います。

保存データがあれば読み込みへ、なければ既定値のままBGM再生へ進む接続

Trueでは Load Game from Slot を呼び、同じSlot NameとUser Indexを指定します。そのReturn Valueを Cast To SG_SettingsPracticeAudio のObjectへ、白い実行線をCastの実行入力へつなぎます。

Castは、読み戻したデータを今回のSG_SettingsPracticeAudioとして扱えるか確かめる処理です。成功すれば、その中のBGMVolumeを読めます。

Castが成功したら、As SG Settings Practice AudioをSet AudioPreferencesへ渡し、その後でStartPracticeAudioを呼びます。これで、既定値の入れ物が保存済みのものへ置き換わります。

Cast FailedではPrint Stringで Audio preferences could not be loaded と出し、その後でStartPracticeAudioを呼びます。読み戻せなかった場合も、最初に用意した0.5で画面を使えます。

ロードしたデータをCastで確認し、成功したらAudioPreferencesを置き換える。失敗した場合も既定値で再生へ進む接続

4. 読んだ音量で再生を始める

StartPracticeAudioの中で、Get AudioPreferencesからGet BGMVolumeを取得し、Clamp (Float) へ渡します。Min=0、Max=1です。Clampは値を指定範囲へ収める処理で、ここではスライダーと同じ範囲にそろえます。

AudioPreferencesに保存された音量を読み、Clampで0から1の範囲へ収める接続

白い実行線を次の順につなぎます。

順番ノード接続・設定
1VolumeSliderの Set ValueIn Value=ClampのReturn Value
2Spawn Sound 2DSound=SC_SettingsPracticeBGM、Volume Multiplier=同じClampのReturn Value、Pitch=1、Start Time=0、Persist Across Level Transition=オフ、Auto Destroy=オン
3Set PreviewAudio値=Spawn Sound 2DのReturn Value
4VolumeSliderの Set Is EnabledIn Is Enabled=オン

Spawn Sound 2Dは、音を鳴らし始めると同時に、その音を操作できるAudio Componentを返します。保存済みの音量を最初から渡すので、起動直後だけ大きな音で鳴ることを避けられます。Spawn Sound 2Dの公式仕様

同じClampの値をスライダーとSpawn Sound 2Dの音量へ渡し、読み戻した音量で再生を始める接続

鳴らし始めた音は、あとで音量を変えられるように残しておきます。

再生中のAudio ComponentをPreviewAudioへ残し、VolumeSliderの操作を有効にする接続

最後に、Event On InitializedのRefreshPracticeStatusの後へ、LoadPracticeAudioをつなぎます。起動時は「画面設定の取得・表示 → 音量の読み込み → BGM再生」という順です。

Set VideoSettingsの後で現在値を表示し、音量の読み込みを呼ぶ起動時の後半

5. スライダーを動かして聞き比べる

VolumeSliderのOn Value Changedを追加します。イベントの白い実行出力を、実行ピン付きの Is Valid へつなぎます。Input ObjectはGet PreviewAudioです。

Is Valid側から Set Volume Multiplier を呼び、TargetへPreviewAudio、New Volume MultiplierへOn Value ChangedのValueを渡します。Is Not Valid側は何もしません。再生開始前の初期化で値が変わっても、まだ存在しないAudio Componentを操作しないためです。

スライダーの変更時にPreviewAudioの存在を確認し、その音へ新しい音量を渡す接続

Standaloneで開始し、スライダーを左右へ動かします。1は元の音量倍率、0.5はその半分の倍率です。聞こえる大きさが、ちょうど半分になるという意味ではありません。

まだ保存処理はないので、この段階では起動し直すと既定値へ戻ります。次で、選んだ音量も残します。

6. 同じボタンから音量も保存する

引数なしの関数 SavePracticeAudio を作ります。

Get AudioPreferencesの青い出力から Set BGMVolume を作り、値へVolumeSliderのGet Valueを渡します。SetのTargetはAudioPreferencesです。Widget自身へ同名の変数を作る必要はありません。

スライダーの現在値を、AudioPreferencesのBGMVolumeへ書き込む接続

その後へ Save Game to Slot をつなぎます。Save Game ObjectはAudioPreferences、Slot NameはSettingsPracticeAudio、User Indexは0。実行出力をBranchへ、Return ValueをConditionへ渡します。

AudioPreferencesを指定スロットへ保存し、Return Valueで成功と失敗へ分岐する接続
Branch行うこと
TrueStatusTextをSet Textで「画面設定を適用しました。BGM音量も保存しました。」へ変更
FalseStatusTextを「画面設定は適用済みです。BGM音量の保存に失敗しました。」へ変更

このReturn Valueで確認できるのは、音量用SaveGameの保存成否です。Apply Settings全体の保存成功を判定する値ではありません。

保存結果に応じて、StatusTextへ成功または失敗のメッセージを表示する2つの接続

ApplyButtonのOn Clickedを、Apply Practice Video → Save Practice Audio の順にします。先ほどのPrint Stringは外します。画面設定はApply Settings、音量はSave Game to Slotで保存される形になりました。

適用・保存ボタンから、画面設定の適用とBGM音量の保存を順に呼ぶ最終接続

起動し直して確かめる

コンパイル・保存してStandalone Gameを起動します。今回の保存データは、練習中も次回へ残ることを前提に確かめます。

操作確かめる結果
サイズを1280×720、画質を「高」にして適用ウィンドウの大きさが変わり、現在の設定表示も1280×720・高になる
音量を少し下げ、適用・保存を押すBGMが小さくなり、音量保存の結果が表示される
音量を0まで下げ、再び上げる無音から音が戻る。戻らなければSound CueのPlay When Silentを確認する
ゲームウィンドウを閉じ、同じ練習を再実行起動時の設定値が残り、BGMも保存した音量で鳴り始める
サイズ・画質を「変更しない」にして、音量だけ変えて保存画面設定を一括変更せず、音量を更新できる
音量を変えて試聴し、保存せず閉じる次回は最後に保存した音量へ戻る

設定欄の見た目だけでなく、反映された結果と次回起動の両方を見るのがポイントです。Standaloneで確かめた後は、配布用にパッケージしたゲームでも同じ往復を確認してください。エディタの起動設定やコマンド指定が、画面サイズに影響する場合もあります。

適用して閉じ、もう一度起動しても解像度・画質・音量が残っていることを確かめる

うまくいかないとき

症状確認する場所
設定画面は見えるが押せないUI Only、Show Mouse Cursor、部品のIs Enabled
サイズが変わらないStandaloneで実行しているか、Windowedを設定したか、Then 2がApply Settingsへつながっているか
画質の段階が1つずれるComboのIndexから1を引いているか
音量だけの変更で画質まで変わるIndex 1〜4のときだけSet Overall Scalability Levelを呼んでいるか
BGMが鳴らないSound Cue単体のプレビュー、Spawn Sound 2DのSound、保存済み音量、Load後にStartPracticeAudioへ進むか
スライダーを動かしても音が変わらないSet Volume MultiplierのTargetがPreviewAudioか、Valueがつながっているか
音量が次回に戻らないSet BGMVolumeのTarget、Save Game Object、保存・読込のSlot NameとUser Index
候補は「変更しない」だが設定が消えたように見える現在値はCurrentSettingsTextで確認する。候補は次に変更する項目を選ぶもの

おまけ:自分のゲームへ組み込むなら

解像度の候補を増やす。 今回の固定2候補は、ウィンドウの大小を確かめる練習用です。製品では、対象環境や表示モードに合う候補を用意します。全画面用にはGet Supported Fullscreen Resolutions、ウィンドウ用にはGet Convenient Windowed Resolutionsが出発点です。候補の配列が空、現在値が候補にない、未選択のIndexが-1、といった場合も扱います。

変更前へ戻す確認画面。 Fullscreenなども選べるようにする場合は、「この設定を使いますか?」と確認し、時間切れで前の表示へ戻すと操作を取り戻しやすくなります。Apply Settingsは保存も行うので、取り消すときも前の値を適用・保存する流れまで設計します。

BGM以外の音量。 今回操作するのはPreviewAudioの1本です。複数のBGMや効果音をまとめて調整するなら、Sound Classで音をグループに分け、Sound MixやAudio Modulationなどで制御します。保存する値と実際の音へ反映する処理を分ける、という考え方は同じです。

プレイ中の設定メニューへ広げる。 今回はレベル開始時にWidgetを1回だけ作ります。開閉するメニューへ変えるなら、BGMの再生担当は画面の外へ移し、開くたびに同じ曲が重ならないようにします。閉じるときの入力・カーソルの戻し方は、ポーズメニューの記事が続きになります。

保存処理の規模。 今回のSaveGameは音量1項目なので、処理が終わるまで待つ通常の保存・読み込みを使いました。大きな進行データを同時に扱うなら、非同期保存などを検討します。詳しくはEpicのゲームの保存と読み込みを参照してください。

まとめ

画面設定はGame User Settingsへ値を渡し、Apply Settingsで適用・保存します。BGM音量は再生中のAudio Componentへ反映し、SaveGameへ残した値を次の起動時に読み戻しました。

まずはウィンドウの大小とBGM音量を変え、いったんゲームを閉じてみてください。次に開いたときも自分で選んだ状態になっていれば、「選べるだけのUI」から、遊びやすさを調整できる設定画面へ進めています。

参考:一括画質の設定値個別設定時の画質値Sound CueとループSave Game to Slot

設定画面を多言語へ広げるなら Localization Dashboardで日英を切り替える へ進んでください。

Unreal Engine このセクションのノート98