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-変数の増分。



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

こちらです



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



All Articles