Содержание
Storage
В ранном разделе будут описаны три с способа для сохранений:
- Первый основной модуль Storage необходим для облачного сохранения. Он самый удобный и правильный, но если сохранения в проекте уже реализованы, например с Player Prefs — то придётся их переделывать.
- Модуль Redefine Player Prefs — переопределяет стандартный класс Player Prefs на сохранения плагина. Если импортирован модуль Storage, то данные будут сохраняться в класс SavesYG, как сохраняются другие данные с помощью модуля Storage. Таким образом вы можете сохранить свои Player Prefs в облако. Если не переопределить Player Prefs, то в Яндекс Играх и в некоторых других платформах после обновления игры все сохранения сотрутся. Когда модуль Storage не имопртирован, данные сохранятся в локальное хранилище браузера. В таком случае данные не сотрутся, но это всё же это не такой надёжный способ как облако.
- Модуль Player Stats — быстрые сохранения в облако. Сохранять данные можно только типа int.
Основной модуль Storage
Обратите внимание на настройки модуля Storage:
Все параметры имеют всплывающие подсказки.
При использовании облачных сохранений (Save Cloud) для Яндекс Игр необходимо:
- Импортировать модуль Authorization.
- В консоли игры поставить данную галку:
Когда активированы и локальные и облачные сохранения — данные будут сохраняться в локальное хранилище и в облако платформы. При загрузке сохранений — будут загружены актуальные сохранения. Если при последнем сохранении в облако по каким-либо причинам данные не были сохранены, то плагин загрузит локальные сохранения. Когда все сохранения актуальные — будут загружены облачные.
Если параметр Flush отключён и в игре нет слишком частого сохранения прогресса, то можно отключить Save Local, потому что с ними иногда может произойти рассинхрон сохранений на разных устройствах.
Интеграция
Создайте скрипт в любой папке проекта и с любым наименованием. Вставьте в него следующий код:
namespace YG
{
public partial class SavesYG
{
// Ваши данные для сохранения
public int coins = 5; // Пример
}
}
Внутри класса SavesYG будут храниться все ваши поля, которые необходимо сохранить.
Как пример создано поле
coins
(монеты). Оно будет использоваться в проекте как глобально поле для монет.Чтобы получить данные или изменить, делайте это также, как с любыми другими полями в вашем коде. Хранилище сохранений находится в
YG2.saves
.Хранилище сохранений статично. Изменения поля не сбросятся на протяжении всей игровой сессии.
Но данные необходимо сохранять, чтобы они не сбросились после закрытия игры. Для этого используйте метод:
YG2.SaveProgress();
Загружаются сохранения сами — в поле
YG2.saves
(класс SavesYG) при запуске игры. Не нужно вызывать метод загрузки, но всё же вы можете его использовать в спецефических случаях: YGInsides.LoadProgress();
Метод
LoadProgress
требует подключения пространства имён YG.Insides
. В этой библиотеке есть и другие внутренние методы PluginYG2.Получение данных после выполнения метода
LoadProgress
идёт асинхронно. По этому после того как данне будут получены — вызовется ивент onGetSDKData
.
Подытожим:
- Необходимо создать класс и прописать в нём свои поля, которые нужно сохранять.
- В своих скриптах пользваться созданными полями, использовать их для чтения и записи.
- Сохранять эти поля с помощью метода
SaveProgress
отправляя их в локальное или облачное хранилище. - При запуске игры, данные сами подтянутся в экземпляр класса
YG2.saves
.
Подробнее
- Данные сохраняются в строку json.
- Можно сохранять экземпляр класса — для этого необходимо к классу применить атрибут
[System.Serializable]
. - Можно использовать конструктор. В классе SavesYG может быть любая логика — методы и т.д.
- Используйте коллекцию Generic вместо обычного массива. При попытке расширить массив сохранения будут загружаться с ошибкой.
Redefine Player Prefs
(Необходимо импортировать модуль RedefinePlayerPrefs)
Желательно использовать в связке с модулем Storage, чтобы данные сохранялись в облако.
В Unity Editor, Android, Windows и т.д. сохранение будет происходить по средствам стандартного класса Player Prefs.
В скриптах вашего проекта переопределите стандартный класс PlayerPrefs. Вставьте следующую строку в начале скрипта:
using PlayerPrefs = RedefineYG.PlayerPrefs;
Чтобы быстро найти все скрипты в проетке использующие Player Prefs — можно воспользоваться ссответствующим инструментом вашего IDE. Например, в Visual Studio открыть поиск по всем скриптам проекта можно сочетанием клавиш CTRL + SHIFT + F.
Теперь остаётся только выполнять метод SaveProgress
или PlayerPrefs.Save
в ключевых местах.
Метод PlayerPrefs.Save
— дублирует метод SaveProgress. Если он уже присутствует в нужных местах - отлично.
Когда мы используем методы записи данных, например PlayerPrefs.SetString
, они меняются в текущей игровой сессии, но не сохраняются в локальное хранилище или облако. Ещё необходимо их сохранять с помощью описанных выше методов. Помните, что слишком часто выполнять методы сохранения не рекомендуется!
Player Stats
(Необходимо импортировать модуль PlayerStats)
Это быстрые сохранения в облако с большим тайм-аутом со стороны платформы Яндекс Игры. Использование PlayerStats схоже с PlayerPrefs, но сохранить данные можно только integer типа.
Для сохранения используйте метод SetState
:
YG2.SetState(название сейва, integer значение)
Для получения значения используйте метод GetState
:
YG2.GetState(название сейва)
Также можно пользоваться списком сейвов:
YG2.GetAllStats()
— вернёт Dictionary<string, int>
.
Изменить весь список сейвов можно с помощью метода YG2.SetAllStats()
. Таким образом, можно удалить все сейвы.
Загрузку сейвов производит сам PluginYG при запуске игры. Но в специфических ситуациях вы можете воспользоваться методом LoadStats
. Получение данных после выполнения метода LoadStats
идёт асинхронно. По этому после того как данне будут получены — вызовется ивент onGetSDKData
.