はじめに
UnrealEngineのラーニングコースのブロックベースのゲームの構築で作成したゲームに、セーブ機能を追加してみました。
セーブ機能はブループリント ランタイムの保存とロードの内容を参考に作成しました。
# 環境 Windows10 UnrealEngine 4.27.2ラーニングコースのブロックベースのゲームにセーブ機能を追加しました#UE4 #UE4Study pic.twitter.com/oGymwRnmS1
— 高浜 (@SatoshiTakahama) January 2, 2022
作り方
・UnrealEngineのラーニングコースのブロックベースのゲームの構築を一通り実施します。
・セーブする内容を定義する構造体S_SaveItemsを作成します。
構造体は、コンテンツブラウザ上で右クリック=>ブループリント=>構造体を選択して作成します。
変数は以下のようにClassとTransformを追加します。ClassにはBP BaseBlockクラスを型として、TransformはTransformを型として指定します。

・SaveGameオブジェクトのSG_SpawnedBlocksを作成します。
SaveGameオブジェクトは、コンテンツブラウザ上で右クリック=>ブループリントクラスを選択し、親クラスにSaveGameを指定して作成します。
変数は以下のようにSpawnedBlocksとSlotNameを追加します。SpawnedBlocksには先ほど作成した構造体S_SaveItemsの配列を型として、SlotNameにはStringを型として指定します。

・セーブ機能のインターフェースとしてBPI_SpawnBlocksを作成します。
インターフェースは、コンテンツブラウザ上で右クリック=>ブループリント=>ブループリントインターフェースを選択して作成します。
関数SpawnBlock, RemoveBlock, SaveBlocks, LoadBlocks, ClearBlocksを追加します。SpawnBlockとRemoveBlockは以下のようにインプットを指定します。

・ゲームモードGM_BlockGameを修正し、セーブ機能を追加します。
クラス設定から実装インターフェースにBPI_SpawnBlocksを追加します。

変数CreatedBlocksList, SaveBlocksListを追加します。

以下のようにイベントグラフにSpawnBlockの実装を追加します。
CreatedBlocksListにSpawnしたブロックを追加しています。

以下のようにイベントグラフにRemoveBlockの実装を追加します。
CreatedBlocksListからブロックを削除しています。

以下のようにイベントグラフにSaveBlocksの実装を追加します。
CreatedBlocksListに保存されたブロックをSaveGameオブジェクトを使用してセーブしています。

以下のようにイベントグラフにLoadBlocksの実装を追加します。
SaveGameオブジェクトからロードしたブロックをCreatedBlocksListに追加し、Spawnします。

LoadBlocksの前半拡大

LoadBlocksの後半拡大

以下のようにイベントグラフにClearBlocksの実装を追加します。
セーブされていた内容を削除しています。

以下のようにイベントグラフに起動時にLoadBlocksを実行する処理を追加します。

・BP_BlockPlayerを修正し、セーブ機能を使うように修正します。
BP_BlockPlayerのイベントグラフでブロックをSpawnしている箇所(インプットアクションPlaceBlockから始まる処理)に追加します(以下赤枠の箇所)。

追加箇所拡大

イベントグラフでブロックを削除している箇所(インプットアクションRemoveBlockから始まる処理)に追加します(以下赤枠の箇所)。

追加箇所拡大

イベントグラフにキー入力を追加します。
キー7を押したときにセーブを実行、キー8を押したときにセーブデータをクリアします。

参考資料
・ゲームを保存して読み込む
SaveGameオブジェクトの公式ドキュメントです。