Содержание
Сохранения
В данном разделе будут описаны три с способа для сохранений:
- Первый основной модуль Storage необходим для облачного сохранения. Он самый удобный и правильный, но если сохранения в проекте уже реализованы, например с Player Prefs — то придётся их переделывать.
- Модуль Redefine Player Prefs — переопределяет стандартный класс Player Prefs на сохранения плагина. Если импортирован модуль Storage, то данные будут сохраняться в класс SavesYG, как сохраняются другие данные с помощью модуля Storage. Таким образом вы можете сохранить свои Player Prefs в облако. Если не переопределить Player Prefs, то в Яндекс Играх и в некоторых других платформах после обновления игры все сохранения сотрутся. Когда модуль Storage не импортирован, данные сохранятся в локальное хранилище браузера. В таком случае данные не сотрутся, но это всё же это не такой надёжный способ, как облако.
- Модуль Player Stats — быстрые сохранения в облако. Сохранять данные можно только типа int.
Основной модуль Storage
Рассмотрим настройки модуля Storage:
При использовании облачных сохранений (флаг Save Cloud) для Яндекс Игр необходимо:
- Импортировать модуль Authorization.
- В консоли игры поставить данную галку:
Для Яндекс Игр рекомендуется использовать только облачные сохранения (флаг Save Cloud). При облачном сохранении независимо от того, авторизован пользователь или нет, данные будут сохранены! Если пользователь не авторизован, то данные будут сохранены в локальное хранилище Яндекс Игр.
Локальные сохранения плагина (флаг Save Local) используйте для других платформ, которые не имеют облачных сохранений. Можно настроить флаг Save Local для каждой конкретной платформы по-разному (смотрите раздел Платформы).
Рекомендуется отключить опцию Flash, чтобы сохранения ставились в очередь, тогда все данные точно отправятся на сервер. Иначе, при слишком частом сохранении прогресса (есть лимиты) отправка данных будет отклонена.
Опция Save Cloud Interval — устарела.
Интеграция
Создайте скрипт в любой папке проекта и с любым наименованием. Вставьте в него следующий код:
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
.