Содержание
Платформы
Plugin Your Games 2.0 — мультиплатформенный. Переключаются в два клика!
При переключении платформы устанавливаются соответствующие настройки проекта. Всё гибко настраивается и можно даже создавать свои опции, которые будут вносить изменения в настройки проекта. Или опции могут просто меняться в зависимости от платформы, чтобы в коде получать разные значения для разных платформ.
Если вы можете интегрировать SDK какой-либо площадки в свою игру, то можете попробовать создать свой модуль платформы для PluginYG2.
Бесплатно предоставляется сам PluginYG2 и платформа YandexGames. Остальные готовые платформы я публикую у себя на Boosty всего за 200р.
Настройки платформ
В настройках Plugin Your Games → Basic Settings есть поле Platform — это выбор платформы и ссылка на её настройки.
Настройки платформы удобнее всего открыть в отдельном окне — для этого нажмите правой кнопкой мыши по ссылке → Properties....
В данном примере:
YandexGames — название платформы. Его можно получить из поля YG2.platform
.
YandexGamesPlatform_yg — используется для Scripting Define Symbols.
Настройки проекта — в этом разделе содержатся опции настроек проекта, для которых есть необходимость настраивать по разному для разных платформ. При применении настроек платформы — установятся только те опции, которые активированы флажком слева. Активность опций будет одинаковая для всех платформ.
При обновлении платформы (импорте) снемите флажок с файла настроек платформы, если не хотите чтобы они слетели:
PlatformEventsYG2 компонент
Данный компонент может выборочно выполнять различные методы в зависимости от текущей платформы. Таким образом, можно скрыть некоторые элементы для определённого списка платформ:
В этом примере для Yandex Games видно все элементы, а для Crazy Games они скрываются, т.к. в CG эти модули не работают из-за отсутствия такого функционала у площадки.
Чтобы сделать также, выберите платформы для которых будут выполняться методы и привяжите какие угодно методы. В примере используется деактивация игрового объекта, такой метод привязывается по умолчанию.
Затем можно выровнять элементы интерфейса, чтобы они адаптировались под изменения — с помощью компонента Grid Layout Group.
Работа с кодом
Нечто аналогичное как с компонентом Platform Events YG2
можно делать и в коде, используя вышеупомянутые поле YG2.platform
и дефайны. Например:
using UnityEngine;
using YG;
public class MyClass : MonoBehaviour
{
public void MyMethod()
{
if (YG2.platform == "CrazyGames")
{
gameObject.SetActive(false);
}
#if CrazyGamesPlatform_yg // Код какого то из условий не попадёт в билд
gameObject.SetActive(false);
#else
gameObject.SetActive(true);
#endif
}
}
Методы опциональные
Есть методы с разной реализацией для разных платформ, что позволяет использовать один метод, который будет вести себя по разному для разных платформ.
Метод FirstInterAdvShow
— например, CrazyGames требует, чтобы самый первый показ рекламы при открытии первого уровня/локации проигнорировался. Метод FirstInterAdvShow
проигнорирует первый показ рекламы для CrazyGames, а для YandexGames покажет рекламу в любом случае. После того, как реклама будет показана с помощью данного метода, информация об этом сохранится и реклама будет показана в любом случае, даже при после перезагрузки страницы. Чтобы сбросить эти сохранения, в Unity Editor необходимо отчистить Player Prefs. Для тестирования в вебе откройте игру в режиме инкогнито.
Метод OtherInterAdvShow
покажет рекламу на YandexGames, для CrazyGames проигнорирует. В CrazyGames запрещается показывать рекламу при переходе в главное меню игры и в некоторых других местах. Для таких моментов можно использовать метод OtherInterAdvShow
, чтобы использовать разные его реализации для разных платформ.
Метод LoadInterAdv
будет подгружать рекламу для платформ, в которых это необходимо. Для YandexGames и CrazyGames такого нет, по этому метод у них пустой. Такой же метод есть для рекламы за вознаграждение LoadRewardedAdv
.
Все опциональные методы содержатся в классе OptionalPlatform
. Пример вызова такого метода:
YG2.optionalPlatform.FirstInterAdvShow();
Опциональные методы также можно выполнять без кода через компонент EventsYG2.
Создание опций
Можно создать новые опции для двух разделов:
- Такие же опции как мы рассматривали ранее. Их можно сделать с флагами активности и без. Это опции, которые содержат разные значения для разных платформ.
- Общие настройки, которые размещаются в отдельном разделе. У них будет одинаковое для всех платформ.
И в первом и во втором случае нужно создать скрипт, файл которого можно назвать как угодно и таких файлов сделать можно сколько угодно и к ним применимы атрибуты: [ApplySettings]
, [SelectPlatform]
, [DeletePlatform]
.
Создание платформы
Для примера возьмём платформу Crazy Games.
- Создайте папку с именем платформы в PluginYourGames/Platforms. Название нужно подобрать тщательно, оно много где будет использоваться.
- Создайте текстовый документ
Version.txt
, в нём запишите версию модуля в таком формате:v1.0
. - Создайте файл настроек платформы: ЛКМ → Create → YG2 → New Platform. Настройте по желанию.
- Создайте папку
SDK
— она будет игнорироваться для компилятора, если платформа не активна. В данную папку поместите SDK площадки, если таковой имеется. И все скрипты платформы содержите в папке SDK.
Если вы создаёте WebGL платформу, то шаблон нужно назвать также как назвали платформу. Шаблон — это index.html и другие файлы для WebGL билда. Шаблон должен находиться в папке WebGLTemplates. Сделайте по аналогии с YandexGames.
В настройках PluginYG2 переключитесь на созданную платформу.
В SDK можно создать папку ScriptsYG, чтобы обозначить скрипты для PluginYG. В этой папке создайте базовый скрипт, в котором будет логика инициализации. Я назову скрипт CG_BasicAPI. Вставьте в него шаблон:
#if CrazyGamesPlatform_yg
namespace YG
{
public partial class PlatformYG2 : IPlatformsYG2
{
public void InitAwake() { }
public void InitStart() { }
public void InitComplete() { }
public void GameplayStart() { }
public void GameplayStop() { }
public void HappyTime() { }
}
}
#endif
- Все реализации происходят в одном классе
PlatformYG2
. - Для реализации нужно переопределить существующий метод.
- Сначала выполняется метод
InitAwake
, потом методы инициализации модулей. Потом методInitStart
, за нимInitComplete
. - Если требуется, в методе
InitAwake
производим асинхронные инициализации. Если нужно, сохраняем некоторые данные для модулей. - Переопредиляем реализации для модулей.
Реализация рекламы
Все методы в интерфейсе для модуля можно найти в папке модуля → Scripts. Скрипты интерфейсы помечены подпиью interface
. Там же можно посмотреть и стандартную реализацию.
Вместе со всеми модулями идёт реализация для стандартной платформы YandexGames. Содержится в скриптах с подписью yandexPlatform
.
В скриптах с подписью yg
содержится логика самого модуля. В info
опции из настроек PluginYG.
Рассмотрим реализацию для Interstitial Adv:
#if CrazyGamesPlatform_yg && InterstitialAdv_yg
using CrazyGames;
using YG.Insides;
namespace YG
{
public partial class PlatformYG2 : IPlatformsYG2
{
public void InterstitialAdvShow()
{
CrazySDK.Ad.RequestAd(CrazyAdType.Midgame, () =>
{
YGInsides.OpenInterAdv();
}, (error) =>
{
YGInsides.ErrorInterAdv();
YGInsides.CloseInterAdv();
}, () =>
{
YGInsides.CloseInterAdv();
});
}
public void FirstInterAdvShow()
{
OptionalPlatform.FirstInterAdvShow_RealizationSkip();
}
public void OtherInterAdvShow() { }
}
}
#endif
InterstitialAdvShow
. CrazyGames предоставляет коллбеки открытия, закрыти и т.д. рекламы.
В соответствующих коллбеках выполняются методы из внутреннего класса YGInsides
, в нём содержится всё скрытое. Так мы выполняем, например, метод закрытия рекламы: YGInsides.CloseInterAdv();
А в OptionalPlatform
содержатся готовые реализации для опциональных методов. О них сказано выше.
Реализация локализации
Создайте метод GetLanguage
, который должен вернуть язык. Пример:
#if CrazyGamesPlatform_yg && Localization_yg
using CrazyGames;
namespace YG
{
public partial class PlatformYG2 : IPlatformsYG2
{
public string GetLanguage()
{
if (CrazySDK.User.IsUserAccountAvailable)
{
return CrazySDK.User.SystemInfo.countryCode.ToLower();
}
return "en";
}
}
}
#endif
Реализация облачных сохранений
Метод LoadCloud
должен загружать сохранения. Для этого нужно передавать их в json строке методу YGInsides.SetLoadSaves
. Стандартное значение указываем Null
. Если передаваемое значение будет нулевым или это будет пустая строка, то сохранения сбросятся.
Метод SaveCloud
должен сохранять. Сохраняем поле YG2.saves
. Пример:
#if CrazyGamesPlatform_yg && Storage_yg
using UnityEngine;
using YG.Insides;
#if NJSON_STORAGE_YG2
using Newtonsoft.Json;
#endif
using CrazyGames;
namespace YG
{
public partial class PlatformYG2 : IPlatformsYG2
{
private const string KEY_SAVE = "CG_SavesYG";
public void LoadCloud()
{
string jsonSaves = CrazySDK.Data.GetString(KEY_SAVE, null);
YGInsides.SetLoadSaves(jsonSaves);
}
public void SaveCloud()
{
#if NJSON_STORAGE_YG2
CrazySDK.Data.SetString(KEY_SAVE, JsonConvert.SerializeObject(YG2.saves));
#else
CrazySDK.Data.SetString(KEY_SAVE, JsonUtility.ToJson(YG2.saves));
#endif
}
}
}
#endif
Создали модуль? Напишите мне 😀 mbornysov@mail.ru