Скачать бесплатную книгу по Blueprint для Unreal Engine.

Основная цель книги — дать общий, целостный и понятный обзор системы Blueprint. Книга предлагает взгляд с высоты «птичьего полёта» — ясную и чёткую карту игрового мира Unreal Engine, которая поможет увидеть ключевые взаимосвязи и понять, как устроена система визуального скриптинга.

Зарегистрироваться в ЛК и скачать книгу [Blueprints. Взгляд с высоты «птичьего полёта»]


Blueprint-классы

Класс Save Game в Unreal Engine | сохранение игры |UE4, UE5

Автор: Будуев Антон / UE просто, Создана: 11.07.2026 в 10:42

Save Game в Unreal Engine

Save Game — это специальный класс для хранения игровых данных между игровыми сессиями, то есть класс для создания сохранений игры.

Его основная задача — быть контейнером для информации, которую необходимо записать на диск, а затем восстановить при следующем запуске игры. Благодаря этому игрок может продолжить прохождение с того места, где остановился, а различные элементы игрового мира могут сохранять своё состояние.

По умолчанию переменные игровых объектов — например, персонажей, противников и других Акторов — существуют только в оперативной памяти. Они доступны, пока игра запущена, но после завершения игры или перезагрузки уровня удаляются.

Если не использовать систему сохранений, то при каждом новом запуске такие данные, как здоровье персонажа, количество собранных предметов, прогресс заданий и другие игровые параметры, будут возвращаться к своим исходным значениям.

Класс Save Game решает эту проблему. Он выступает связующим звеном между оперативной памятью и постоянным хранилищем — например, жёстким диском или SSD.

Но важно понимать, что Save Game хранит не сами игровые объекты, например открытый сундук, а данные, необходимые для восстановления их состояния. В случае с сундуком это может быть логическая переменная Boolean, которая указывает, открыт он или закрыт.

При этом сами данные хранятся не в исходном виде, а в изменённом — сериализованном.

Как работает сохранение данных

Работа системы сохранений основана на механизме сериализации.

Сериализация — это преобразование структуры данных в последовательность байтов, которую можно записать на диск или передать по сети.

Перед сериализацией разработчик вручную копирует необходимые игровые данные из объектов игрового мира в объект Save Game. Например, это могут быть:

  • здоровье персонажа;
  • количество ресурсов;
  • координаты игрока;
  • содержимое инвентаря.

После этого Unreal Engine сериализует объект Save Game, то есть преобразует его содержимое в последовательность байтов и сохраняет данные в файл формата .sav.

При загрузке происходит обратный процесс — десериализация. Движок считывает файл сохранения и на основе полученных данных восстанавливает объект Save Game вместе со всеми его переменными. После этого разработчик переносит сохранённые значения из объекта Save Game обратно в соответствующие игровые объекты.

Таким образом, общая логика сохранения через Save Game выглядит следующим образом: Игровые объекты → нужные данные копируются в объект Save Game → объект Save Game сериализуется → сериализованные бинарные данные записываются в файл .sav

Например, если в игровом мире есть сундук, который игрок уже открыл, в Save Game сохраняется не сам сундук, а значение логической переменной, например: IsOpened = True

После этого объект Save Game сериализуется, и это состояние записывается в файл сохранения.

При загрузке выполняется обратный процесс: Считывается файл .sav → сохранённые бинарные данные десериализуются → восстанавливается объект Save Game со всеми сохранёнными значениями → игровые объекты получают необходимые данные из Save Game и восстанавливают своё состояние

В примере с сундуком ситуация будет выглядеть следующим образом: после загрузки из Save Game считывается значение IsOpened = True, и игра на его основе восстанавливает состояние сундука как открытого.

Какие данные можно хранить в Save Game

Объект Save Game поддерживает большинство типов данных, которые Unreal Engine умеет сериализовать. К ним относятся:

  • Integer;
  • Float;
  • Boolean;
  • String;
  • Name;
  • Vector;
  • Rotator;
  • Transform;
  • Color.

Также можно хранить перечисления, структуры, массивы, словари и множества.

На практике в Save Game чаще всего сохраняют:

  • здоровье персонажа;
  • игровую валюту;
  • уровень игрока;
  • координаты;
  • содержимое инвентаря;
  • прогресс выполнения заданий;
  • пользовательские настройки;
  • состояние различных объектов игрового мира.

Что нельзя сохранять напрямую

В Save Game нельзя напрямую сохранять ссылки на объекты игрового мира, например:

  • Actor Reference;
  • Character Reference;
  • Component Reference;
  • Widget Reference;
  • и другие подобные ссылки.

Причина заключается в том, что после завершения игры эти объекты уничтожаются. При следующем запуске игры они создаются заново. Это уже будут новые экземпляры объектов, поэтому сохранённая ранее ссылка больше не будет указывать на существующий объект и станет недействительной.

Вместо самой ссылки необходимо сохранять данные, с помощью которых объект можно найти, создать или восстановить. Например:

  • уникальный идентификатор;
  • имя — Name;
  • класс — Class;
  • трансформацию — Transform;
  • другие необходимые параметры.

То есть вместо сохранения самого объекта или ссылки на него сохраняются данные, описывающие его состояние.

Настройка системы сохранений в Blueprint

Процесс работы с Save Game в Blueprint можно разделить на пять основных этапов.

1. Создание собственного класса Save Game

Сначала необходимо создать собственный Blueprint-класс, наследующийся от стандартного класса SaveGame. Для этого в Content Browser выбирают Blueprint Class, после чего в качестве родительского класса указывают SaveGame.

Созданный Blueprint можно назвать, например: BP_MySaveGame

В этот класс добавляются все переменные, которые должны сохраняться между игровыми сессиями. Например:

  • PlayerHealth — здоровье персонажа;
  • PlayerGold — количество игровой валюты;
  • PlayerTransform — положение персонажа;
  • массив инвентаря;
  • список выполненных заданий;
  • другие необходимые данные.

Таким образом, пользовательский класс Save Game определяет структуру сохранения: какие именно данные игра должна запоминать и в каких переменных они будут храниться.

После создания переменных Blueprint необходимо скомпилировать и сохранить.

2. Создание объекта Save Game

Когда необходимо выполнить сохранение, в оперативной памяти создаётся объект подготовленного класса Save Game. Для этого используется Blueprint-узел: Create Save Game Object

В параметре Save Game Class указывается созданный ранее класс, например BP_MySaveGame.

В результате узел через Return Value возвращает экземпляр BP_MySaveGame, существующий в оперативной памяти. В нём уже присутствуют все созданные ранее переменные, однако перед сохранением их необходимо заполнить актуальными значениями из игрового мира.

3. Заполнение Save Game игровыми данными

После создания объекта Save Game необходимо получить данные из соответствующих игровых объектов. Например, если требуется сохранить параметры персонажа, можно получить доступ к нему с помощью Cast: Cast to BP_PlayerCharacter

Если система должна работать с различными типами объектов без жёсткой зависимости от конкретных классов, вместо Cast можно использовать Blueprint Interface.

После получения доступа к объекту из него считываются необходимые значения:

  • здоровье;
  • игровая валюта;
  • координаты;
  • инвентарь;
  • прогресс заданий;
  • другие игровые параметры.

Затем эти значения записываются в соответствующие переменные объекта Save Game с помощью узлов Set.

Например:

  • Set PlayerHealth;
  • Set PlayerGold;
  • Set PlayerTransform.

Именно на этом этапе текущее состояние игрового мира переносится в объект Save Game.

4. Сохранение данных на диск

После заполнения объекта актуальными значениями вызывается узел: Save Game to Slot

В параметр Save Game Object передаётся заполненный объект BP_MySaveGame. В параметре Slot Name задаётся имя сохранения, например: SaveSlot1

Параметр User Index обычно оставляют равным 0.

После выполнения узла Unreal Engine сериализует объект Save Game и записывает его содержимое в файл формата .sav. Если объём сохраняемых данных достаточно велик, рекомендуется использовать: Async Save Game to Slot

Этот узел выполняет сохранение асинхронно и позволяет избежать кратковременных зависаний игры во время записи данных.

Слоты сохранения

Unreal Engine использует систему слотов сохранения. Слот представляет собой строку, используемую как имя сохранения. Например:

  • SaveSlot1;
  • SaveSlot2;
  • QuickSave;
  • AutoSave.

Благодаря этому можно реализовать несколько игровых профилей, ручные сохранения, быстрые сохранения и систему автосохранения. Чтобы избежать ошибок, имя слота рекомендуется хранить в отдельной переменной или константе и использовать одно и то же значение как при сохранении, так и при загрузке.

Где хранятся файлы сохранения

Во время разработки файлы сохранений обычно располагаются в папке: Project / Saved / SaveGames

В готовой игре место хранения зависит от операционной системы и платформы. Unreal Engine автоматически выбирает подходящую директорию, поэтому разработчику обычно не требуется самостоятельно работать с файловыми путями.

5. Загрузка сохранения

Загрузка может выполняться при запуске игры или уровня, например в событии Event Begin Play, либо после выбора игроком пункта «Продолжить игру».

Сначала рекомендуется проверить существование файла сохранения с помощью узла: Does Save Game Exist. При проверке необходимо использовать то же имя слота, которое применялось во время сохранения. Если узел возвращает True, через Branch можно перейти к загрузке и вызвать: Load Game from Slot.

Этот узел считывает файл .sav, выполняет десериализацию и самостоятельно создаёт восстановленный объект Save Game. То есть при загрузке вручную вызывать Create Save Game Object уже не требуется. Load Game from Slot возвращает объект базового типа Save Game. Чтобы получить доступ к пользовательским переменным, его необходимо привести к созданному ранее классу, например: Cast to BP_MySaveGame

После успешного Cast становятся доступны все сохранённые переменные. Их можно считывать с помощью соответствующих узлов Get. Например:

  • Get PlayerHealth;
  • Get PlayerGold;
  • Get PlayerTransform.

Далее необходимо получить доступ к игровым объектам, состояние которых требуется восстановить. Для этого снова можно использовать Cast или Blueprint Interface. После этого сохранённые значения записываются в игровые объекты. Например:

  • PlayerHealth присваивается переменной здоровья персонажа;
  • PlayerTransform применяется с помощью Set Actor Transform;
  • данные инвентаря и прогресса заданий записываются обратно в соответствующие игровые системы.

После выполнения этих действий состояние игры будет восстановлено в соответствии с данными, записанными в момент сохранения.

Где размещать логику сохранения

Логику сохранения и загрузки можно размещать в различных классах в зависимости от архитектуры проекта. Например:

  • Character;
  • Player Controller;
  • меню паузы;
  • системе контрольных точек;
  • Game Instance.

Одним из удобных вариантов является Game Instance, поскольку его экземпляр существует на протяжении всей игровой сессии и не уничтожается при смене уровней. В таком случае функциональность сохранения и загрузки можно вынести в отдельные функции, например: SaveGame() LoadGame()

При этом независимо от выбранного места принцип работы системы остаётся одинаковым: игровые данные переносятся в Save Game перед сохранением и возвращаются обратно после загрузки.

Что важно понимать о Save Game

Объекты класса Save Game, в отличие от Actor или Character, не создаются движком автоматически при запуске уровня и не существуют в игровом мире. При сохранении разработчик должен самостоятельно:

  • создать объект Save Game;
  • заполнить его необходимыми данными;
  • передать его в Save Game to Slot.

При загрузке ситуация отличается. Узел Load Game from Slot самостоятельно считывает файл сохранения, создаёт объект Save Game, восстанавливает его переменные и возвращает готовый экземпляр. После этого разработчику остаётся получить сохранённые значения и применить их к соответствующим игровым объектам.

Что в итоге

Несмотря на большое количество используемых Blueprint-узлов, принцип работы системы Save Game достаточно прост. Во время сохранения данные из игровых объектов копируются в объект Save Game, после чего он сериализуется и записывается в файл формата .sav.

При загрузке происходит обратный процесс: Unreal Engine считывает файл, восстанавливает объект Save Game, а сохранённые в нём значения переносятся обратно в игровые объекты.

Таким образом, вся система сохранений сводится к двум основным операциям:

  • копированию данных из игровых объектов в Save Game перед сохранением;
  • обратному копированию данных из Save Game в игровые объекты после загрузки.

Сам Save Game при этом не взаимодействует с игровым миром напрямую. Он является контейнером для данных, которые необходимо сериализовать и сохранить между игровыми сессиями.

Для простоты работу Save Game можно представить через аналогию с почтовым конвертом. Вы сами кладёте в него письмо (игровые данные), отправляете конверт на почту (записываете данные на диск), а после получения достаёте письмо и читаете его (переносите сохранённые данные обратно в игровые объекты).

===============

Зарегистрироваться в ЛК и скачать книгу по Blueprint: [Blueprint. Взгляд с высоты «птичьего полёта»]

111 просмотров

    Скачать бесплатную книгу по Blueprint для Unreal Engine.

    Основная цель книги — дать общий, целостный и понятный обзор системы Blueprint. Книга предлагает взгляд с высоты «птичьего полёта» — ясную и чёткую карту игрового мира Unreal Engine, которая поможет увидеть ключевые взаимосвязи и понять, как устроена система визуального скриптинга.

    Зарегистрироваться в ЛК и скачать книгу [Blueprints. Взгляд с высоты «птичьего полёта»]

      Канал Unreal Engine — это просто