ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
この記事の要点
- UMG のウィジェットブループリントに「ロードボタン」を配置し、セーブデータを復元する
- 読み込みの中核ノードは Load Game from Slot。スロット名はセーブ時と一致させる
- 保存内容は SaveGame クラス の変数として持ち、Cast して取り出す
- ボタンの On Clicked イベントからロード処理を呼ぶ
- 復元した値で位置(Set Actor Location)やスコア・インベントリを反映する
- スロットが存在しない場合の分岐(Does Save Game Exist)を入れて安全に処理する
1概要
Unreal Engine 5(UE5)で、ゲーム内に「ロードボタン」を作る方法を解説します。プレイヤーがボタンをクリックすると、以前に保存したゲームデータ(位置、スコア、インベントリなど)が読み込まれ、続きから再開できる――そんな仕組みを UMG(ウィジェット)と SaveGame システムで実装します。セーブ機能とセットで使うことで、中断と再開のあるゲーム体験を提供できます。
2仕組み・構造
ロード機能は、次の3つの要素で成り立っています。
- SaveGame クラス:保存したいデータ(座標・スコアなど)を変数として定義した、保存専用のブループリント。
- Load Game from Slot ノード:指定したスロット名から保存済みデータを読み込むノード。戻り値は SaveGame オブジェクト。
- ウィジェット(UMG):プレイヤーがクリックする「ロードボタン」を含むUI。
流れとしては、ボタンの On Clicked → Load Game from Slot でデータ取得 → 取得した SaveGame を Cast → 中の変数をゲームへ反映、という順になります。
3使い方・手順
1. ウィジェットブループリントを作成する
- コンテンツブラウザで右クリックし「ユーザーインターフェース → ウィジェットブループリント」を選択。
- 名前を付けて(例:LoadGameWidget)保存し、ダブルクリックでUIエディタを開く。
2. ロードボタンを追加する
- 「パレット」から Button をドラッグしてキャンバスに配置。
- 詳細パネルで名前を LoadButton に変更。
- ボタンの中に Text を入れ、「ゲームをロード」と表示する。
3. On Clicked イベントを追加する
- LoadButton を選択し、詳細パネル下部のイベント欄から On Clicked の「+」を押す。
- グラフタブに切り替わり、On Clicked (LoadButton) ノードが生成される。
4. Load Game from Slot でデータを読み込む
- On Clicked から Does Save Game Exist を呼び、対象スロットの有無を確認(任意だが推奨)。
- 存在すれば Load Game from Slot を実行。Slot Name はセーブ時と同じ文字列、User Index は通常 0 を指定。
- 戻り値を、自作の SaveGame クラスへ Cast To で変換する。
5. 読み込んだデータをゲームに反映する
- Cast 後の SaveGame から、保存しておいた値(例:PlayerLocation)を取り出す。
- プレイヤーキャラを取得し Set Actor Location で位置を復元する。
- スコアやインベントリなど他の変数も同様に各システムへ反映する。
6. ウィジェットを画面に表示する
- レベルブループリントまたはプレイヤーキャラのブループリントで Create Widget を呼び、Class に LoadGameWidget を指定。
- 生成したウィジェットを Add to Viewport で画面に追加する。
- 必要に応じ Set Input Mode UI Only とマウスカーソル表示を設定する。
C++ で同等の処理を書く場合、SaveGame のロードは次のような型で受け取ります(テンプレート部分は二重エスケープ表記)。
USaveGame* Loaded = UGameplayStatics::LoadGameFromSlot(TEXT("SaveSlot1"), 0);
UMySaveGame* Data = Cast<UMySaveGame>(Loaded);
4実用例・Tips
- ロード成功の通知:復元後に「ロードしました」のテキストを一瞬表示すると、操作のフィードバックになります。
- 複数スロット対応:スロット名を「Slot1」「Slot2」…と動的に変え、セーブデータ一覧UIを作れます。
- オートセーブとの併用:チェックポイント通過時に自動セーブし、メニューのロードボタンで任意復帰、という構成が定番です。
- ロード後のUI更新:HUDのスコア表示などは、ロード直後にバインドを更新して値を反映させます。
5注意点・落とし穴
- スロット名の不一致:セーブ時とロード時で Slot Name が1文字でも違うと読み込めません。定数化して共有するのが安全です。
- Cast の失敗:保存に使った SaveGame クラスと別クラスへ Cast すると失敗し、以降の処理が止まります。Cast の Failed ピンも結線して握りつぶさないようにします。
- 存在チェック忘れ:セーブデータが無い状態で Load すると null が返り、Set Actor Location 等でエラーになります。必ず Does Save Game Exist で分岐します。
- ロードのタイミング:BeginPlay 直後にレベルの初期化が終わっていないと、位置復元が上書きされることがあります。1フレーム遅らせる等の対処が有効です。
6関連リンク
- サードパーソンテンプレートにおけるキャラクター出現の定義 ― 復元した位置にキャラを出す前提知識
- アセット ― UIに使うウィジェットもアセットの一種
- オープンワールドテンプレートとは? ― セーブ対象となる広大マップの構造
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- セーブするボタンを作成する方法
- セーブするとセーブファイルの実体がどこに保存されるか
- ロードするボタンを作成する方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- NetBeansでTomcatを起動する手順|サーバ登録・ポート・トラブル対処 2026-09-07 07:45:13
- Laravel 記事一覧55件|環境構築・ルーティング・DB・エラー対処 2026-09-07 07:45:13
- Spring Framework 記事一覧31件|DI・設定・例外の対処 2026-09-07 07:45:13
- Javaの定数 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- hostnameコマンドの使い方|Windows・Linux・macOSでホスト名確認 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Oracle DROP USERでユーザー削除|CASCADE・接続中ユーザーの対処 2026-09-07 07:45:13
- SQLとは|DDL・DMLとリレーショナルデータベース操作の基本 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?