はじめに
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オブジェクトの公式ドキュメントです。