Хранилище
Обзор
Модуль позволяет работать с локальными хранилищами и облачными хранилищами площадок.
Типы хранилищ:
- platform FREE - Облачное хранилище площадки + локальные хранилища (максимальная репликация).
- ✅Яндекс.Игры
- ✅CrazyGames
Площадки без поддержки
- ❌GamePix
- ❌GameDistribution
- ❌GameMonetize
- ❌Одноклассники
- ❌SmartMarket
- ❌Вконтакте
- ❌VK Play
- ❌WG Playground
- ❌Kongregate
- ❌PlayDeck
- ❌Google Play
- ❌Telegram
- ❌билайн
- ❌Фотострана
- ❌Y8
- ❌CoolMathGames
- ❌Android (альтернативные сторы)
- ❌Web (свои сайты)
- local FREE - Локальные хранилища, параллельное сохранение в несколько типов локальных хранилищ для надежности без потерь прогресса на iOS.
- LocalStorage - стандартное локальное хранилище.
- IndexedDB - база данных браузера.
- SafeStorage - безопасное хранилище, предоставляемое площадкой.
- ✅Яндекс.Игры
- ✅GamePix
- ✅CrazyGames
- ✅Web (свои сайты)
Площадки без поддержки
- ❌GameDistribution
- ❌GameMonetize
- ❌Одноклассники
- ❌SmartMarket
- ❌Вконтакте
- ❌VK Play
- ❌WG Playground
- ❌Kongregate
- ❌PlayDeck
- ❌Google Play
- ❌Telegram
- ❌билайн
- ❌Фотострана
- ❌Y8
- ❌CoolMathGames
- ❌Android (альтернативные сторы)
Вы можете в любой момент переключаться между типами хранилищ. Умолчательное значение - platform.
- JavaScript
- Unity
// Установить тип хранилища - облако площадки + локальные хранилища
gp.storage.setStorage('platform');
// Установить тип хранилища - локальные хранилища
gp.storage.setStorage('local');
// Установить тип хранилища - облако площадки + локальные хранилища
GP_Storage.SetStorage(SaveStorageType.platform);
// Установить тип хранилища - локальные хранилища
GP_Storage.SetStorage(SaveStorageType.local);
Контекстное хранилище
FREEПо-умолчанию все данные хранятся в контексте игрока. Это позволяет хранить разные данные для разных игроков и площадок.
Контекст состоит из:
- ID проекта
- Тип площадки
- Тестовая / боевая версия сайта
- ID игрока на площадке
Так мы можем разделять данные для разных площадок, даже используя один домен. И разделять эти данные между игроками. Вы можете хранить отдельно данные гостя и данные авторизованных игроков.
С помощью методов get
и set
вы обращаетесь по-умолчанию к данным в контексте игрока. Вы можете хранить любые типы данных, мы автоматически их конвертируем в нужный формат, если того требует хранилище.
Метод асинхронный. Не все хранилища могут установить данные моментально. Некоторые, например, облачные или IndexedDB делают это с задержкой, поэтому мы возвращаем промис или отправляем событие, когда данные будут установлены.
Установить значение
- JavaScript
- Unity
// Установить значение
await gp.storage.set('key', 'value');
// Установить число
await gp.storage.set('gold', 1000);
// Установить булевое значение
await gp.storage.set('vip', true);
// Установить любой тип данных
await gp.storage.set('progress', {
class: 'warrior',
level: 5,
gold: 1000,
missions: [1, 5, 8],
});
// Установить значение
GP_Storage.Set("key", "value");
// Установить число
GP_Storage.Set("gold", 1000);
// Установить булевое значение
GP_Storage.Set("vip", true);
События при установке значения
- JavaScript
- Unity
// Значение установлено
gp.storage.on('set', ({ key, value }) => {});
// Подписаться на событие
private void OnEnable()
{
GP_Storage.OnSetValue += OnSetValue;
}
// Отписаться от события
private void OnDisable()
{
GP_Storage.OnSetValue -= OnSetValue;
}
// Значение установлено
private void OnSetValue(StorageField storage) => Debug.Log($"Set value: Key: {storage.key}, Value: {storage.value}");
Получить значение
Получение значений так же ассинхронно.
Если данных нет, хранилище вернет null.
- JavaScript
- Unity
// Получить значение
const value = await gp.storage.get('key');
// Получить число
const gold = await gp.storage.get('gold');
// Получить булевое значение
const vip = await gp.storage.get('vip');
// Получить любой тип данных
const progress = await gp.storage.get('progress');
// progress.class
// progress.missions[0]
// Получить значение
GP_Storage.Get("key", OnGetValue);
// Получить число
GP_Storage.Get("gold", OnGetValue);
// Получить булевое значение
GP_Storage.Get("vip", OnGetValue);
// Коллбэк с полученным значением
private void OnGetValue(object value) => Debug.Log($"Get value: {value}");
События при получении значения
- JavaScript
- Unity
// Значение получено
gp.storage.on('get', ({ key, value }) => {});
// Подписаться на событие
private void OnEnable()
{
GP_Storage.OnGetValue += OnGetValue;
}
// Отписаться от события
private void OnDisable()
{
GP_Storage.OnGetValue -= OnGetValue;
}
// Значение получено
private void OnGetValue(StorageField storage) => Debug.Log($"Get value: Key: {storage.key}, Value: {storage.value}");
Глобальное хранилище
FREEВы можете устанавливать данные без учета контекста игрока, в глобальную область видимости. Так вы можете для всех профилей установить значение или обмениваться данными между профилями.
Установить значение
- JavaScript
- Unity
// Установить значение
await gp.storage.setGlobal('key', 'value');
// Установить число
await gp.storage.setGlobal('gold', 1000);
// Установить булевое значение
await gp.storage.setGlobal('vip', true);
// Установить любой тип данных
await gp.storage.setGlobal('progress', {
class: 'warrior',
level: 5,
gold: 1000,
missions: [1, 5, 8],
});
// Установить значение
GP_Storage.SetGlobal("key", "value");
// Установить число
GP_Storage.SetGlobal("gold", 1000);
// Установить булевое значение
GP_Storage.SetGlobal("vip", true);
События при установке значения
- JavaScript
- Unity
// Значение установлено
gp.storage.on('set:global', ({ key, value }) => {});
// Подписаться на событие
private void OnEnable()
{
GP_Storage.OnSetGlobalValue += OnSetGlobalValue;
}
// Отписаться от события
private void OnDisable()
{
GP_Storage.OnSetGlobalValue -= OnSetGlobalValue;
}
// Значение установлено
private void OnSetGlobalValue(StorageField storage) => Debug.Log($"Set Global value: Key: {storage.key}, Value: {storage.value}");
Получить значение
Получение значений так же ассинхронно.
Если данных нет, хранилище вернет null.
- JavaScript
- Unity
// Получить значение
const value = await gp.storage.getGlobal('key');
// Получить число
const gold = await gp.storage.getGlobal('gold');
// Получить булевое значение
const vip = await gp.storage.getGlobal('vip');
// Получить любой тип данных
const progress = await gp.storage.getGlobal('progress');
// progress.class
// progress.missions[0]
// Получить значение
GP_Storage.GetGlobal("key", OnGetGlobalValue);
// Получить число
GP_Storage.GetGlobal("gold", OnGetGlobalValue);
// Получить булевое значение
GP_Storage.GetGlobal("vip", OnGetGlobalValue);
// Коллбэк с полученным значением
private void OnGetGlobalValue(object value) => Debug.Log($"Get Global value: {value}");
События при получении значения
- JavaScript
- Unity
// Значение получено
gp.storage.on('get:global', ({ key, value }) => {});
// Подписаться на событие
private void OnEnable()
{
GP_Storage.OnGetGlobalValue += OnGetGlobalValue;
}
// Отписаться от события
private void OnDisable()
{
GP_Storage.OnGetGlobalValue -= OnGetGlobalValue;
}
// Значение получено
private void OnGetGlobalValue(StorageField storage) => Debug.Log($"Get Global value: Key: {storage.key}, Value: {storage.value}");
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!