Unreal Engineでのゲームの保存と読み込み



こんにちは、私の名前はドミトリーです。 私は趣味としてアンリアルエンジンでコンピューターゲームを作っています。 今日は、ゲームをディスクに保存し、ディスクからロードする方法を説明します。

まず、保存する変数を決定する必要があります;これはC ++で行われます。

UPROPERTY(SaveGame) 


青写真の場合:

画像

その後、次の方法で保存とロードが実行されます。
保存中:

 FMemoryWriter MemoryWriter(ObjectData, true); FObjectAndNameAsStringProxyArchive Ar(MemoryWriter, false); Ar.ArIsSaveGame = true; //Set achive is savegame Ar.ArNoDelta = true; Object->Serialize(Ar); 


ダウンロード:

 FMemoryReader MemoryReader(ObjectData, true); FObjectAndNameAsStringProxyArchive Ar(MemoryReader, false); Ar.ArIsSaveGame = true; //Set achive is savegame Ar.ArNoDelta = true; Object->Serialize(Ar); 


ご覧のとおり、読み込みからの保存は、保存時にFMemoryWriterを使用し、読み込みにFMemoryReaderを使用するアーカイブのみが異なります。
オブジェクト-これは、保存する変数値のクラスのインスタンスです。
ObjectData-これは、ファイルに書き込む、またはファイルから読み取るバイトの配列です。
ArIsSaveGame-このフラグは、SaveGameとしてマークされた変数を保存するためにアーカイブが使用されることを示します。
ArNoDelta-変数の値が最初にクラスコンストラクターで設定され、次にクラスプロパティパネルで設定された場合に発生するエラーが発生しないように、このフラグを設定する必要があります。 変数が保存され、その値がコンストラクター内の値と等しい場合は、プロパティパネルから値がロードされます。

変数のすべての値がアーカイブに保存されたら、このアーカイブをファイルに書き込む必要があります。 これは次のように行われます。

保存中:

 FFileHelper::SaveArrayToFile(Data, *SavePath) 

ダウンロード:

 FFileHelper::LoadFileToArray(Data, *SavePath) 

さらに、ディスク容量を節約するために、圧縮形式でファイルを保存およびロードできます。

保存中:

 TArray<uint8> CompressedData; FArchiveSaveCompressedProxy Compressor(CompressedData, ECompressionFlags::COMPRESS_ZLIB); // Compresed Compressor << Data; //send archive serialized data to binary array Compressor.Flush(); FFileHelper::SaveArrayToFile(CompressedData, *SavePath) 

ダウンロード:

 FFileHelper::LoadFileToArray(CompressedData, *SavePath) // Decompress File FArchiveLoadCompressedProxy Decompressor(CompressedData, ECompressionFlags::COMPRESS_ZLIB); //Decompress Decompressor << Data; 

圧縮を使用する場合、データ圧縮のために中間アーカイブFArchiveSaveCompressedProxyを作成し、データ回復のためにFArchiveLoadCompressedProxyを作成する必要があります。

実際には、それだけです
ここに例があります

ここで、sを押すと、ISaveObject_StoryGraphクラスの子孫であるマップ上のすべてのアクターが保存されます。 それぞれlを押すと、ロードが発生します。p-画面上の変数の表示i-変数の増分。

さらに、クエストを編集するためのプラグインには、保存およびロードする機能もあります(キー[-保存、]-ロード)、
こちらです

ここで読むことができます

Source: https://habr.com/ru/post/J319228/


All Articles