воскресенье, 23 июня 2019 г.

Руководство по Fungus. Сохранение и Загрузка

Вступление

Нотабене Система сохранения в настоящее время находится в бета-версии, чтобы получить обратную связь от сообщества. Вероятно, в будущих обновлениях будут существенные изменения, поскольку мы улучшаем дизайн.
Fungus Save System предоставляет простой способ сохранить и загрузить состояние выполнения Блок-Схем в вашей игре.
Из этого туториала Вы узнаете, как быстро добавить функцию сохранения в играх Fungus.
Система сохранения работает, сохраняя серию очков(Save Points) сохранения по ходу игры, чтобы создать Историю Сохранения(Save History).Базовый Save Menu UI позволяющий игроку Сохранять(Save), Загружать(Load), Перезагружать(Restart), Перематывать Назад(Rewind ) и Перематывать Вперед(Fast Forward) через Историю Сохранения(Save History).


Точка сохранения создается путем выполнения команды Save Point в Блок-Схеме. Когда точка сохранения загружается позже, выполнение возобновляется сразу после этой команды Save Point. Система сохранения наблюдает за восстановлением состояния переменных Блок-Схемы в каждой точке сохранения, и вы также можете получать уведомления, когда конкретная точка сохранения загружается через обработчик события Save Point Loaded.
Если вы используете старые команды для сохранения отдельных переменных (Set Save Profile, Save Variable, Load Variable), они все еще работают, но отдельно от новой системы сохранения.

Пример Сцены «Сохранить игру»

Чтобы увидеть, как работает система сохранения, откройте пример сцены  FungusExamples/Savegame/SaveGame.unity
Нажмите Play в Unity и пролистайте рассказ. Меню Save Menu можно открыть в любое время, щелкнув значок маленькой шестерни в правом верхнем углу. Попробуйте сохранить, загрузить, перемотать, перемотать вперед и перезапустить в разных точках во время прохождения истории. Также попробуйте сохранить игру в середине истории и остановить игру. Нажмите Play еще раз и обратите внимание, что игра возобновляется с того места, где вы остановились.
The Save Menu также поддерживает режим автосохранения, при котором игра сохраняется на диск в каждой точке сохранения. Вы можете включить это, выбрав объект Save Menu и выбрав свойство Auto Save. Кнопки Save и Load отключены при использовании Auto Save.
Ниже приведены ключевые элементы, которые используются для реализации сохранения в этом примере сцены..

Save Menu UI


Объект Save Menu oможно увидеть в корне окна иерархии. Этот объект управляет меню пользовательского интерфейса, которое игрок использует для взаимодействия с системой сохранения. Save Menu - это одноэлементный объект, который сохраняется при загрузке сцены, поэтому вам нужно добавить его только один раз в первой сцене вашей игры.
Чтобы добавить Save Menu выберите  Tools > Fungus > Create > Save Menu.

Создание Точек Сохранения

Точки Сохранения создаются путем выполнения команд Save Point в Блок-Схеме.
Чтобы увидеть это в примере сцены, убедитесь, что окно Блок-Схемы отображается (через Tools > Fungus > Flowchart Window),  затем выберите объект Блок-Схемы в окне Иерархии и выберите каждый из Блоков в Блок-Схеме. Первая команда в каждом блоке - это команда Save Point (добавляется через Flow > Save Point).
Когда каждая команда Save Point command выполняется, она добавляет новую Save Point в Save History. При загрузке ранее сохраненной игры выполнение возобновляется сразу после команды Save Point которая создала эту  Save Point.
В примере сцены выберите Блок ‘Start’ Block в окне Блок-Схемы и выберите команду  Save Point в верхней части списка команд. Обратите внимание, что свойство Is Start Point property включено и это единственная команда  Save Point в Блок-Схеме для которой включена эта опция. В сцене должна быть только одна Start Point на сцене.
Когда вы запускаете новую игру, Fungus ищет команду Save Point command с включенным свойством Is Start Point и выполняет ее. При загрузке ранее сохраненной игры, Fungus начинает выполнение с соответствующей команды Save Point и игнорирует start point.
Это означает, что если ваша игра поддерживает сохранение, то у вас всегда должна быть ровно одна команда Save Point со включенным свойством Is Start Point в каждой сцене.
Нотабене Обработчик событий Game Started будет запускаться как для новых, так и для загруженных игр, что, как правило, не то, что вам нужно, поэтому избегайте его использования в играх, которые поддерживают сохранение.

Обработка событий Save Point Loaded

Вам часто нужно проделать дополнительную работу, когда сохраненная игра загружается, чтобы убедиться, что сцена находится в правильном состоянии. Например. Возможно, камеру нужно переместить в соответствующее место или на определенную музыкальную дорожку, сыгранную в данный момент в игре. Простой способ сделать это - через обработчик события Save Point Loaded.
IВ примере сцены выберите Блок ‘Play Music 1’ в окне Блок-Схемы,  и убедитесь, что в нем есть обработчик события Save Point Loaded. Этот Блок будет выполнен, когда загрузится любая из Save Points из Save Point Keys списка загрузок. В этом случае мы просто играем правильное музыкальное произведение для этой части игры, но вы можете выполнить любую настройку, необходимую здесь.
The Save Point Loaded event handler will also fire when a matching Save Point command executes (if the Fire Event property is enabled). This allows you to place all the scene setup commands into a single shared Block which will be called when a Save Point command is first reached or when loading a previously saved game at that Save Point.

Сохранение Переменных Блок-Схемы

Каждая Save Point может хранить состояние переменных Блок-Схемы в этот момент времени. Вы используете объект Save Data чтобы система сохранения знала, какие Блок-Схемы должны быть включены в нее. Обратите внимание, что в настоящее время сохраняются переменные типа Boolean, Integer, Float и String.
В примере сцены объект Save Data можно увидеть в корне окна Иерархии. Свойство Блок-Схем содержит список объектов Блок-Схемы, которые необходимо сохранить в этой сцене.
Чтобы добавить объект Save Data на сцену, выберите Tools > Fungus > Create > Save Data. Вы можете добавить в список столько Блок-Схем, сколько захотите, но убедитесь, что у каждого из них есть уникальное имя (например, Flowchart1, Flowchart2, и т. д.), Иначе загрузка не будет работать правильно.
Если вы заинтересованы в расширении системы сохранения для поддержки сохранения других типов данных (помимо переменных потоковой диаграммы), вы можете изменить или создать подкласс компонента SaveData для достижения этой цели.

Пользовательский Интерфейс Save Menu

Save Menu - это простой пользовательский интерфейс, который позволяет игрокам взаимодействовать с системой сохранения Fungus. В этом разделе объясняется, что делает каждая кнопка и как настроить свойства Save Menu.

Свойства Save Menu

Существует 4 основных свойства, которые вы можете настроить в Save Menu.
  • Save Data Key: строковый ключ, используемый для сохранения данных игры в Player Prefs. Если в одном проекте Unity определено несколько игр, используйте уникальный ключ для каждой из них.
  • Load On Start: Автоматически загружать ранее сохраненную игру при запуске.
  • Auto Save: Автоматическое сохранение игры на диск при каждом сохранении. Когда эта опция включена, кнопки  Save и Load отключены.
  • Restart Deletes Save: удалить данные сохранения с диска, когда игрок перезапустит игру. Это полезно при тестировании вашей игры, чтобы убедиться, что вы начинаете с пустого состояния сохранения.
Нотабене Если ваша игра использует несколько сцен (например, с помощью команды  Load Scene), обязательно добавьте всю сцену в список Scenes in Build list в Build Settings.

Кнопка Save

При нажатии кнопки Save текущая  Save History сериализуется в текст JSON и записывается в постоянное хранилище с помощью класса PlayerPrefs.

Кнопка Load

Нажатие на кнопку Load приводит к десериализации ранее сохраненных данных JSON и их заполнению. Последняя точка сохранения затем используется для восстановления игрового состояния в следующем порядке.
  • Загрузите сцену, сохраненную в  Save Point (даже если это текущая загруженная сцена).
  • Восстановить переменные Блок-Схемы в сохраненные значения
  • Вызвать Save Point Loaded и запустить выполнение Блок-Схемы после соответствующей команды Save Point.

Кнопки перемотки Назад и Вперед(Rewind Fast Forwar)

Кнопки Rewind иFast Forward позволяют перемещаться назад и вперед между Save Points в Save History.
Каждый ход просто загружает Save Point сохраненную в определенной точке в Save History. амо по себе это не меняет Save History и ничего не записывает в постоянное хранилище. Однако, если вы вернетесь к более ранней точке сохранения и начнете воспроизведение снова, в следующий раз, когда будет выполнена команда Save Point это приведет к тому, что все Save Points находящиеся дальше по времени, будут удалены навсегда.

Кнопка Restart

Кнопка Restart button очищает Save History  и загружает начальную сцену. Начальная сцена - это сцена, которая была активной при первоначальной инициализации Save Menu.

Запуск Игры

Помните, что игрок может в любой момент загрузить или перезапустить игру. Следуйте этим простым правилам, чтобы гарантировать, что запуск игры обрабатывается правильно во всех случаях.
  1. Каждая сцена в вашей игре должна иметь ровно одну команду Save Point со включенным свойством Is Start Point. Если в вашей игре несколько сцен, убедитесь, что для каждой из них определена начальная Save Point и что это первая команда, выполненная на сцене.
  2. Избегайте использования обработчика событий Game Started. Это будет работать правильно только при первом запуске игры, а не после загрузки сохраненной игры. После загрузки сохраненной игры вы хотите, чтобы выполнение началось с Save Point, а не с начала Блок-Схемы.
  3. Используйте обработчик события Save Point Loaded когда вы хотите выполнить Блок, когда загружены определенные точки сохранения. Эти обработчики событий вызываются до возобновления выполнения с помощью команды Save Points так что это дает вам возможность выполнить настройку до возобновления игрового процесса.

Терминология

Save Point

Save Point  - это снимок состояния игры в определенный момент времени. Каждая Save Point записывает текущую сцену, текущую точку выполнения Блок-Схемы (т.е. в команде Save Point)и текущие значения переменных Блок-Схемы. В настоящее время сохраняются только переменные типа Boolean, Integer, Float и String.

Команда Save Point

Команда Save Point используется в Блок-Схеме для создания Save Point в этой точке выполнения. Каждая отдельная команда Save Point должна иметь уникальный Save Point Key. Параметр Resume On Load позволяет возобновить выполнение с этой точки после загрузки Save Point.

Save Point Key

Save Point Key  - это уникальный строковый идентификатор для одной Save Point. По умолчанию имя родительского Блока используется для Save Point Key, но при необходимости вы также можете использовать пользовательский Ключ(Key) (например, несколько команд Save Point в одном Блоке).
Нотабене Каждый ключ должен быть уникальным для каждой сцены, иначе загрузка не будет работать правильно!

Save History

Save History содержит список ранее записанных Save Points, сохраненных в хронологическом порядке. При выполнении команды Save Point создается новая Save Pointкоторая добавляется в Save History.
Чтобы визуализировать Save Historyво время выполнения, разверните объект Save Menu в окне Иерархии, выберите  Save Menu > Panel > Debug View и включите игровой объект. Сводная информация о Save Points в Save History будет отображаться в текстовом окне.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.