【UE4】セーブデータの管理(セーブ&ロード)

UEセーブデータ管理
スポンサーリンク

今回の記事はUnreal Engineでセーブデータを扱うための参考ブループリントをまとめたいと思います。

参考BP(ブループリント)の動きとしては、プレイヤーの移動速度をセーブして、次起動した時にその速度で移動できるようにするといった物です。

今回は基礎の作り方のみまとめますが、応用できる方法ですのでぜひ試してみてください!

こんな人におすすめ

・Unreal Engineでゲームを作っている
・セーブデータを扱う簡単な参考BPが欲しい

プロジェクトの準備

まずは仮のプロジェクトを準備します。どれを使っても問題はないのですが今回は「Blank」で動きを確認したいと思います。

プロジェクトの準備

「Blank」でプロジェクトを作ったら、Player StartのX座標の位置を下げて全体を見通せる位置に持っていきます。これは実行中に全体を見て動きを確認するためです。

プロジェクトの準備

X座標を-450ぐらいに持っていくとちょうど良いと思います。ここまでできたら、動きを確認するための仮アクター(プレイヤーの代わりになるもの)を作ります。

アクターの作成
アクターの作成

新規ブループリントクラスから「Actor」を選んで「OK」を押してください。

アクターの作成

今回名前は「BP_NewPlayer」にしています。好きな名前で作ったら次の手順へ進みます。

アクターの作成

アクターはとりあえず見た目を追加したいので、左上の「コンポーネントを追加」から「キューブ」を足しておきましょう。

アクターの準備

また、キューブ追加後はFloat型の変数を一つ追加しておきます。

変数の追加後は「イベントグラフ」タブを開き、サンプルのための動きを設定します。今回は以下のようにブループリントを組みました。

ブループリントの追加

・「イベント Tick」→「AddActorLocalOffset」
・「AddActorLocalOffset の Delta Location」→「Make Vector」
・「Make Vector の Y」→「Player Move Speed(先ほど作った変数)」

サンプルの動きのためのBPを組んだら、ワールド上にドラッグ&ドロップでアクターを配置します。

シーンへの配置

左よりに配置を行うとチェックがしやすいと思います。

ここまでできたら、セーブデータを管理するBPを組んでいきましょう!

BPサンプル データロード

次にブループリントクラスの「SaveGame」で保存するデータを作り、それを設定するデータロード関数をレベルブループリントに作ります。

手順は以下の動画にまとめていますので、確認してみてください!

【UE4】セーブデータロードBP


BPが完成したら、次はレベルブループリントの「イベントグラフ」で処理を呼び出します。今回はキーボードイベントの「 L 」で処理を実行しようと思います。

・少し解説
今回はデータのロードをLoad Game from Slotで行い「データがない場合は新規作成、ある場合はデータの数値でプレイヤーの速度を上書きする」という処理を行っています。

キー設定
BP作成

ここまでできたら、一度動きを確認してみましょう!

ゲームを実行状態にし、ゲーム画面を一度クリックしてキーボード操作入力を受け付ける状態にしてから「 L 」キーを押してみてください。最初は動いていなかった箱が、ゆっくり左に動くのを確認できると思います。

また、一度「 L 」でセーブデータを作ると以下のフォルダにSAVファイルが作られます。
・PC/ドキュメント/Unreal Projects/プロジェクト名/Saved/SaveGames

次は実際に数値を変更して保存する関数を作りましょう。

BPサンプル データセーブ

データのセーブ関数を作る前にプレイヤーの速度を上げる関数を作りたいと思います。

BP作成

動きを確認するための仮プレイヤーBP「BP_NewPlayer」にSpeedUpという関数を作りました。このSpeedUpを以下のように組みます。

BP作成

今回は単純に現在値に0.1を加算するだけにしています。これをレベルブループリントで「 U 」が押された時に呼び出されるようにしたいと思います。

BP作成

ターゲットに指定しているBP_NewPlayerは上のロードデータでやったときのようにドラッグ&ドロップで持ってきてください。

この状態でゲームを実行状態にして「 L 」を押した後に「 U 」を押すと、徐々にスピードが上がることを確認できると思います。しかし、ゲームを止めて再度実行後に「 L 」を押しても、元のゆっくりしたスピードで箱が動く状態だと思います。

これはセーブが発生していないので、初期値に入れている「0.5」が再度読み込みされるために発生する現象です。

実際に次はセーブ関数を作っていきます。まずはレベルブループリントに新しく「SaveData」関数を追加します。

追加後は以下のようにBPを組みます。

BP作成

※Save Game to Slot の Slot Name 入力忘れに注意!

あとはレベルブループリントの「イベントグラフ」で「 S 」キーが押された時にこの関数を呼び出すように処理を変えてみたいと思います。

BP作成

動きの確認と注意点

これで必要な処理は全て完成しました。実際に動きを確認してみましょう!

・ゲームを実行後、ゲーム画面をクリック
・「 L 」キーでデータをロード
・「 U 」キーを何度か押してスピードアップ
・「 S 」キーでデータ保存
・ゲームを一度止めて再度実行
・もう一度画面クリックから「 L 」キー

上の手順で、早くなった速度が読み込まれて適応されることを確認できると思います。※セーブデータを作っていない(読み込んでいない)状態で「 S 」キーを押さないように注意

セーブデータを確実に読み込んだ状態からスタートするために、以下のようにレベルブループリントのイベントに参加BeginPlayでLoadGameの処理を実行するのもおすすめです。

BP作成

またセーブの値を初期値にしたい場合は、フォルダに作られたSAVファイルを消すと初期値にデータが戻ります。

まとめ

以上がセーブデータを管理するためのBPのサンプルについてでした!

セーブデータはほとんどのゲームで使うことになる処理だと思います。ぜひ一度実装を試してみてください。