こんにちは、私の名前はドミトリーです。 私は趣味としてアンリアルエンジンでコンピューターゲームを作っています。 今日は、ゲームをディスクに保存し、ディスクからロードする方法を説明します。
まず、保存する変数を決定する必要があります;これは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-変数の増分。
さらに、クエストを編集するためのプラグインには、保存およびロードする機能もあります(キー[-保存、]-ロード)、
→ こちらです 。
ここで読むことができます 。