3.

UE5 でロードボタンを作る方法|UMG と Load Game from Slot でセーブデータ復元

編集
この記事の要点
  • UMG のウィジェットブループリントに「ロードボタン」を配置し、セーブデータを復元する
  • 読み込みの中核ノードは Load Game from Slot。スロット名はセーブ時と一致させる
  • 保存内容は SaveGame クラス の変数として持ち、Cast して取り出す
  • ボタンの On Clicked イベントからロード処理を呼ぶ
  • 復元した値で位置(Set Actor Location)やスコア・インベントリを反映する
  • スロットが存在しない場合の分岐(Does Save Game Exist)を入れて安全に処理する

概要

Unreal Engine 5(UE5)で、ゲーム内に「ロードボタン」を作る方法を解説します。プレイヤーがボタンをクリックすると、以前に保存したゲームデータ(位置、スコア、インベントリなど)が読み込まれ、続きから再開できる――そんな仕組みを UMG(ウィジェット)SaveGame システムで実装します。セーブ機能とセットで使うことで、中断と再開のあるゲーム体験を提供できます。

仕組み・構造

ロード機能は、次の3つの要素で成り立っています。

  • SaveGame クラス:保存したいデータ(座標・スコアなど)を変数として定義した、保存専用のブループリント。
  • Load Game from Slot ノード:指定したスロット名から保存済みデータを読み込むノード。戻り値は SaveGame オブジェクト。
  • ウィジェット(UMG):プレイヤーがクリックする「ロードボタン」を含むUI。

流れとしては、ボタンの On ClickedLoad Game from Slot でデータ取得 → 取得した SaveGame を Cast → 中の変数をゲームへ反映、という順になります。

使い方・手順

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

  1. コンテンツブラウザで右クリックし「ユーザーインターフェース → ウィジェットブループリント」を選択。
  2. 名前を付けて(例:LoadGameWidget)保存し、ダブルクリックでUIエディタを開く。

2. ロードボタンを追加する

  1. 「パレット」から Button をドラッグしてキャンバスに配置。
  2. 詳細パネルで名前を LoadButton に変更。
  3. ボタンの中に Text を入れ、「ゲームをロード」と表示する。

3. On Clicked イベントを追加する

  1. LoadButton を選択し、詳細パネル下部のイベント欄から On Clicked の「+」を押す。
  2. グラフタブに切り替わり、On Clicked (LoadButton) ノードが生成される。

4. Load Game from Slot でデータを読み込む

  1. On Clicked から Does Save Game Exist を呼び、対象スロットの有無を確認(任意だが推奨)。
  2. 存在すれば Load Game from Slot を実行。Slot Name はセーブ時と同じ文字列、User Index は通常 0 を指定。
  3. 戻り値を、自作の SaveGame クラスへ Cast To で変換する。

5. 読み込んだデータをゲームに反映する

  1. Cast 後の SaveGame から、保存しておいた値(例:PlayerLocation)を取り出す。
  2. プレイヤーキャラを取得し Set Actor Location で位置を復元する。
  3. スコアやインベントリなど他の変数も同様に各システムへ反映する。

6. ウィジェットを画面に表示する

  1. レベルブループリントまたはプレイヤーキャラのブループリントで Create Widget を呼び、Class に LoadGameWidget を指定。
  2. 生成したウィジェットを Add to Viewport で画面に追加する。
  3. 必要に応じ Set Input Mode UI Only とマウスカーソル表示を設定する。

C++ で同等の処理を書く場合、SaveGame のロードは次のような型で受け取ります(テンプレート部分は二重エスケープ表記)。

USaveGame* Loaded = UGameplayStatics::LoadGameFromSlot(TEXT("SaveSlot1"), 0);
UMySaveGame* Data = Cast<UMySaveGame>(Loaded);

実用例・Tips

  • ロード成功の通知:復元後に「ロードしました」のテキストを一瞬表示すると、操作のフィードバックになります。
  • 複数スロット対応:スロット名を「Slot1」「Slot2」…と動的に変え、セーブデータ一覧UIを作れます。
  • オートセーブとの併用:チェックポイント通過時に自動セーブし、メニューのロードボタンで任意復帰、という構成が定番です。
  • ロード後のUI更新:HUDのスコア表示などは、ロード直後にバインドを更新して値を反映させます。

注意点・落とし穴

  • スロット名の不一致:セーブ時とロード時で Slot Name が1文字でも違うと読み込めません。定数化して共有するのが安全です。
  • Cast の失敗:保存に使った SaveGame クラスと別クラスへ Cast すると失敗し、以降の処理が止まります。Cast の Failed ピンも結線して握りつぶさないようにします。
  • 存在チェック忘れ:セーブデータが無い状態で Load すると null が返り、Set Actor Location 等でエラーになります。必ず Does Save Game Exist で分岐します。
  • ロードのタイミング:BeginPlay 直後にレベルの初期化が終わっていないと、位置復元が上書きされることがあります。1フレーム遅らせる等の対処が有効です。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. セーブするボタンを作成する方法
  2. セーブするとセーブファイルの実体がどこに保存されるか
  3. ロードするボタンを作成する方法

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