- PVSM.RU - https://www.pvsm.ru -
Здравствуйте, меня зовут Дмитрий. Я занимаюсь созданием компьютерных игр на 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 — для восстановления данных.
Собственно, на этом все
→ вот пример [1]
Здесь при нажатии s происходит сохранение всех акторов на карте которые являются наследниками класса ISaveObject_StoryGraph. При нажатии l соответственен происходит загрузка.
Кроме того в плагине для редактирования квестов тоже появилась возможность сохранятся и загружаться (клавиши [ — сохранить, ] — загрузить),
→ вот он [2].
Почитать пор него можно здесь [3].
Автор: deema35
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/232145
Ссылки в тексте:
[1] вот пример: https://cloud.mail.ru/public/KEBU/MtVNfWqGG
[2] вот он: https://github.com/Deema35/StoryGraph
[3] можно здесь: https://habrahabr.ru/post/318366/
[4] Источник: https://habrahabr.ru/post/319228/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.