ほげたつブログ

プログラムとアニメーションをかじって生きてる

UE4でゲームデータのセーブ/ロード

多くのゲームではデータのセーブ/ロードを実装します。
今回はUE4でローカルファイルへのセーブ/ロードを試してみました。
UE4のバージョンは4.8.2です。

プロジェクト作成

ThirdPersonテンプレートを使用してプロジェクト作成。

キー登録

「編集」→「プロジェクト設定」→「インプット」→「Action Mappings」にキー登録。

  • Load Game
    • 0キー
  • Save Game
    • Shift + 0キー

f:id:hogetatu:20150725234453j:plain

セーブデータクラスを作成

SaveGameを継承してセーブ用のBlueprintを作成します。

f:id:hogetatu:20150725234704j:plain

保存する内容をセーブデータクラスに記述

今回はプレイヤーの位置情報を保存するので、Transform型で「PlayerTransform」という変数を定義します。

f:id:hogetatu:20150725235531j:plain

ロード用の関数定義

レベルのブループリントを開き、LoadGameDataという関数を実装します。

f:id:hogetatu:20150726000203j:plain

GameDataというのはセーブデータクラスをメンバとして宣言したものです。
ロード時はまずGameDataがNullかどうかチェックし、もしNullであれば新規で作成しています。
その後、「Load Game from Slot」でファイル保存されているセーブデータをロードし、プレイヤーの位置情報を上書いています。

セーブデータにはスロット名とユーザーインデックスが指定できます。
スロット名はセーブデータの名前、ユーザーインデックスはその中でのIDみたいなものですね。
ドラクエ冒険の書1とか冒険の書2とかそんなイメージです。

セーブ用の関数定義

レベルのブループリントを開き、SaveGameDataという関数を実装します。

f:id:hogetatu:20150726000758j:plain

セーブ関数が呼ばれたら、プレイヤーの位置情報を取得してGameDataのPlayerTransformを更新し、「Save Game to Slot」でファイル保存しています。

呼び出し処理

レベルのブループリントのイベントグラフを開き、セーブ/ロード用の関数呼び出しを実装します。

f:id:hogetatu:20150726001456j:plain

こんな感じになりました


Windows上でのセーブデータの保存先

[プロジェクト名]/Saved/SaveGames/[スロット名].sav
に保存されているようです。

ちなみにバイナリエディタで開いてみたところ、

f:id:hogetatu:20150726001826j:plain

なので暗号化等はされていないみたいですね。
ローカルに保存するデータなので暗号化は基本的に必要だと思いますが、方法はまた別の機会に調べようと思います。