
Здравствуйте, меня зовут Дмитрий. Я занимаюсь созданием компьютерных игр на 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 при загрузке.
Object — Это экземпляр класса значения переменных которого мы хотим сохранить.
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 — инкремент переменных.
Кроме того в плагине для редактирования квестов тоже появилась возможность сохранятся и загружаться (клавиши [ — сохранить, ] — загрузить),
→ вот он.
Почитать пор него можно здесь.
