ゲームを保存して読み込む

ゲームを保存して読み込む方法の概要です。

Choose your operating system:

Windows

macOS

Linux

実装方法を選んでください。

Blueprints

C++

「ゲームを保存する」という意味はゲームによって大きく変わりますが、最新ゲームにおいて一般的な考え方ではプレイヤーはゲームを終了し、後から終了した場所からゲームを再開できることを表します。必要になる情報は作成するゲームの種類によって大きく変わります。プレイヤーが到達した最後のチェックポイントや、プレイヤーが見つけたアイテムの種類など、ごく少量の基本情報の場合もあれば、プレイヤーの他のインゲーム キャラクターとのソーシャル インタラクションに関する長いリスト、またはさまざまなクエスト、ミッションの目的、サブプロットの現状など、かなり詳細な情報の場合もあります。Unreal Engine 4 (UE4) は、複数のプレイ セッションにわたり保持するために必要なすべての情報を含め、ゲームの特定のニーズを満たすために作成する 1 つ以上のカスタム SaveGame クラスを中心に回転するシステムを保存およびロードします。複数の保存したゲーム ファイルをもち、異なる SaveGame クラスをこれらのファイルに保存する機能をサポートします。これは、グローバルにロック解除された機能をプレイスルー専用のゲーム データから分離する場合に便利です。

SaveGame オブジェクトの作成

SaveGame オブジェクトを作成するには、 Blueprint クラスを作成する を参照してください。 [Pick Parent Class (親クラスを選択)] ダイアログが開いたら、 [Custom Classes] を展開し、 [SaveGame] を選択します。検索ボックスを使って SaveGame へ直接ジャンプすることができます。新規のブループリントに MySaveGame と名前を付けます。

savegame.png

新規の SaveGame object ブループリントで、保存したい情報に対する変数を作成します。

このサンプルでは、 SaveSlotName と UserIndex に対するデフォルト値の保存の宣言に使用する変数もあるので、 この SaveGame オブジェクトに保存される各クラスには、これらの変数を個別に設定する必要はありません。ここの部分はオプションです。デフォルト値が変更されない場合、上書される保存スロットは 1 つになります。

SaveGameVariables.png

ブループリントのコンパイル後に、変数のデフォルト値を設定できます。

[INCLUDE:InteractiveExperiences/SaveGame\CPP\#CreatingSaveGame]

ゲームを保存する

作成された SaveGame クラスは、ゲームのデータに格納するために変数を使って追加することができます。たとえば、整数変数を作成するとプレイヤーの得点を、あるいは文字列変数を使ってプレイヤーの名前を格納できます。ゲームを保存するときに、その情報は現在のゲーム ワールドから SaveGame オブジェクトへ転送されます。そしてゲームを読み込むときに、SaveGame オブジェクトからそれを Characters、Player Controller、Game Mode などのオブジェクトへコピーします。

まず最初に、 Create Save Game Object ノードを使って、SaveGame クラスに基づいたオブジェクトを作成します。 Save Game Class 入力ピンのドロップダウンを作成したクラス (ここでは「 MySaveGame」 」) に設定されていることを確認してください。 Create Save Game Object ノードは、 Save Game Class 入力ピンで指定したタイプに合うように自動的に出力ピンの種類が自動的に変更され、 Cast To ノードを使わず直接それを使えるようになります。作成したばかりの MySaveGame オブジェクトを簡単に再利用できるように、結果として生じたオブジェクトを Promote to Variable を使って変数へ保存しておくと良いです。

SaveGameBP_1.png

Save Game Instance 変数はカスタムした SaveGame オブジェクトがあるので、そこに情報を送ることができます。例えば、 Player Name フィールドを "PlayerOne" に設定することができます。保存したゲーム ファイルに格納したいデータがすべて含まれるまで、SaveGame オブジェクト内にフィールドを設定します。

SaveGameBP_2.png

SaveGame オブジェクトがすべて入力されたら、 ASync Save Game To Slot ノードを使ってゲームの保存を完了します。ファイル名とユーザー ID も提供する必要があります。この例のファイル名とユーザー ID は前に作成されたデフォルト値です。ゲーム保存操作が完了すると、すぐに実行ピンが 1 番上から 2 番目のピンへすぐに続きます。2 番目のピンが実行されるまで出力ピンは有効にはなりません。

SaveGameBP_3.png

Async Save Game To Slot は、大容量のデータを保存する場合でも引きつりを回避できることから、ゲームの保存に推奨される方法です。しかしながら、保存するゲーム データが小さい場合、またはメニューやポーズ画面から保存する場合は以下のように Save Game To Slot ノードでゲームを保存することもできます。

SaveGameBP_4.png

以下のスクリーンショットは、MySaveGame クラスを使ってゲームを保存するためのブループリントでのすべてのプロセスを表しています。

上の画像をクリックして拡大表示

[INCLUDE:InteractiveExperiences/SaveGame\CPP\#SavingGameInner]

開発プラットフォームでは、保存されたゲーム ファイルは .sav 拡張子を使い、プロジェクトの「 Saved\SaveGames 」フォルダに表示されます。他のプラットフォーム、特にコンソールでは、特定のファイル システムに対応するために異なります。

ゲームをロードする

保存したゲームをロードするには、ゲームを保存するときに使用したスロット名とユーザー ID を指定する必要があります。指定した SaveGame が存在する場合、エンジンはエンジンが含む SaveGame オブジェクトにデータを追加し、基本となる SaveGame (クラス USaveGame ) オブジェクトとして返します。その後でオブジェクトをカスタム SaveGame クラスにキャストし、データにアクセスすることができます。 SaveGame タイプに含まれるデータの種類によって、コピーを保存したり、またはデータのみを使用しオブジェクトを破棄することもできます。

保存と同様に、ロードも同期または非同期で行うことができます。データ量が大きい場合、またはロード時間中にロード中の画面またはアニメーションを使用したい場合、非同期の方法をお勧めします。データが小さくすぐにロードしたい場合は同期の方法があります。

同期的にロードするには Load Game From Slot を使用します。このノードはとても分かりやすいです。指定したスロット名と ID が有効な SaveGame ファイルを特定すると有効な SaveGame オブジェクトを返します。ロード操作の進行中はゲームが停止します。

LoadGameBP.png

Async Load Game From Slot はおおよそ同じように機能しますが、実行出力ピンが 2 つあります。1 つめのピンはロード操作の開始時に、 2 つめのピンはロード操作の完了時に実行します。2 番目のピンが実行されるまで変数出力ピンは有効にはなりません。 Success ピンはロード操作が成功したかどうかを示しますが、返されたオブジェクトを Is Valid ノードに渡したり、 Cast To ノードからロード処理でのあらゆるエラーとして失敗を処理することもできます。

LoadGameBPAsync.png

[INCLUDE:InteractiveExperiences/SaveGame\CPP\#LoadingGameInner]
Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる