UEのセーブ・ロードを解説したかったけど自分用備忘になって悲しい。

※ ある程度操作の分かるアンリアルエンジン中級者向けの記事になります。(細かい操作手順は割愛します。)また自分もよく分かっていない箇所があり得るので、参考程度にしてもらい、完璧な回答を期待しないでください。よく分からない人はfabでセーブ・ロードのアセットを買いましょう。

セーブ機能実装の手順

  1. ゲームインスタンスを作成(例=GI_Test) → プロジェクト設定のゲームインスタンスに設定
  2. セーブゲームブループリントを作成(例=SaveGame_Test)(推奨=SG_プロジェクト名)
  3. ゲームインスタンスのEvent Initでセーブゲームブループリントをインスタンス化してゲームインスタンスに保持
  4. ゲーム開始時にセーブデータがあるかをチェック(ある場合はロード・ない場合は新規ゲーム)
  5. 複数セーブデータがある場合は、名前とインデックスを取得
  6. ロードする場合はセーブゲームクラスからキャストして値を復元させる
  7. 新規ゲームの場合はセーブ値を初期化してゲームスタート
  8. ゲームプレイ中にセーブ機能を作る
    (各アクターの現在値をセーブゲームBPに渡す → SaveGame実行)
  9. ゲーム終了

 



 

セーブ・ロードの設計

解説動画は、設計としてやや冗長

レベル間をまたいだアイテム取得のセーブロード実装方法解説。「簡易版」

以前、セーブ・ロードの機能を解説した動画を作ったのですが、正解は以下の図解に示す設計がよりスマートだと思います。

解説動画では、レベルアクターから現在値をゲームインスタンスに渡す → ゲームインスタンスに現在値 → セーブゲームBPに保存値 という冗長な仕組みになっていましたが、途中のゲームインスタンスに現在値をもたせる部分は要らないと解説動画を作ってから1年経った今なら感じます。(ChatGPTにも確認済み)

「完全版」レベル間をまたいだアイテム取得のセーブロード実装方法解説。

 



 

大規模セーブ・ロードはアセットを探そう

小規模なら自分で作れるが⋯

今回、惑星ゲームのセーブロード機能として、プレイ時間だけをセーブ・ロードするという超単純な、変数1個をセーブ・ロードするという機能を作ったので、自作しました。

しかし大規模なオープンワールドや複数レベルをまたぐような本格的なプロジェクトでは、アセットを導入するのが賢明だと思います。

もちろん見識が深く自分で作っても問題ないよという人は自分で作るのが一番かゆいところにも手が届いて、メンテナンスもしやすいと思いますが、アンリアルエンジン初心者がいきなりそのレベルに到達するのは難しいでしょう。

fabでアセットを探そう

アフィリエイトあれば紹介するけど⋯

fabで目星をつけたセーブ・ロードアセットを何個か見つけているのですが、fabにアフィリエイト機能があれば、具体的にコレ、と紹介するのですが、いかんせんアフィリエイト機能が無いので、せっかく見つけたアセット教えたくない。

というケチ臭い気持ちが先行します。

とはいえ、自分が選んだアセットが、100%視聴者さんにピッタリのアセットであることは、稀なので、まあ自分で時間をかけて自分に最適なセーブ・ロードアセットを探してみましょう。

ちょっと投げやりな気もしますが、他人の意見ばかりで自分の方針を決めるのも開発者としてどうかと思うので、自分で頑張って探してみてください。

 

 

コメント

タイトルとURLをコピーしました