Окно PRUnitySDK → Модули выбирает, какие части SDK входят в сборку проекта. Отключённый модуль вырезается из компиляции целиком: его менеджеры, окна, хуки и типы в проект не попадают. Выбор хранится в настройках игры, файлы SDK при переключении не меняются.
Ядро (PRUnitySDK/Core) в окне только перечислено, отключить его нельзя.
Модуль — это папка. Всё, что в ней лежит, принадлежит модулю.
В корне папки модуля создайте манифест: Create → PRUnitySDK → Module Manifest,
файл назовите Module.asset.
| Поле | Что задаёт |
|---|---|
Id |
часть define-символа PRSDK_DISABLE_<Id>. Заполняется по имени папки: Waypoint System → WAYPOINT_SYSTEM. После того как файлы обёрнуты, не меняйте |
Display Name |
имя в окне; пусто — имя папки |
Description |
одна-две строки о том, что делает модуль |
Group |
подгруппа в окне: Модули, Окна, Компоненты, Сущности, Прочее. «Интеграции» — отдельная вкладка окна |
Is Required |
модуль нельзя отключить. Обёртки его файлам не нужны |
Dependencies |
манифесты модулей, без которых этот не компилируется |
Slot |
слот интеграции, например «Площадка». Из модулей с одним слотом включён не больше чем один |
Platform |
платформа сборки интеграции — имя BuildTarget, например WebGL. Вкладка «Интеграции» группирует по ней модули и предупреждает, если включённая не подходит к активной платформе. Пусто — любая |
Plugin Folder |
папка стороннего плагина, без которого модуль не компилируется. Окно покажет, есть ли она в проекте |
Plugin Modules File |
текстовый файл плагина со списком его установленных частей, по одной в строке. Окно покажет список в карточке модуля |
Project Settings Files |
файлы настроек плагина, свои у каждой игры, — пути от папки плагина (у YG2 — Resources/SettingsYG2.asset). При смене проекта SDK на их место встаёт копия нового проекта из <папка PRSDKSettings проекта>/PlatformSettings~/<Id модуля>/, правки сразу уходят в копию активного (PRSDKProjectPlatformSettings). Работает и при спрятанном плагине |
Hide Plugin When Disabled |
прятать папку плагина, пока модуль отключён: «Применить» переименует её в Имя~, и Unity её не увидит |
Web GL Template |
шаблон WebGL, который «Применить» ставит, когда модуль включён, например PROJECT:YandexGames |
Web GL Template Source |
папка с исходником этого шаблона внутри модуля, путь от папки модуля, например WebGLTemplate~ (путь с Assets/ — от проекта): так он переживает перенос модуля. «Применить» и сборка WebGL копируют её в Assets/WebGLTemplates/Имя: Unity берёт шаблоны только оттуда. Правится исходник, копия перезаписывается |
Если Id остался пустым, откройте окно модулей: оно заполнит его само.
Папка с манифестом внутри папки другого модуля — вложенный модуль. Его файлы принадлежат ему, и он автоматически зависит от внешнего модуля.
Модуль может занимать несколько папок, в том числе в разных частях SDK. В корне каждой
дополнительной папки создайте Create → PRUnitySDK → Module Part (файл ModulePart.asset)
и укажите в нём манифест модуля. Скрипты такой папки оборачиваются символом этого же модуля
и отключаются вместе с ним. Своего символа и своей строки в окне у части нет.
Каждый скрипт модуля должен быть обёрнут в символ модуля:
#if !PRSDK_DISABLE_BOOSTERS
using UnityEngine;
public class BoosterManager { ... }
#endifРуками это делать не нужно: в окне модулей у такого модуля появится предупреждение «Файлов без обёртки» с кнопкой «Обернуть». Кнопка ставит две строки, кодировку и переводы строк файла сохраняет.
Обёртка нужна всем .cs в папке, включая Editor и вложенные папки. Новый файл
в модуле тоже нужно обернуть. Без обёртки он останется в сборке у отключённого модуля
и сломает компиляцию. Такие файлы находит «Проверка проекта» (группа «Модули SDK»).
Модуль A зависит от B, если код A использует типы или partial-свойства B:
PRUnitySDK.Managers.Booster, WheelOfFortuneDatabase и тому подобное.
Такие модули перечисляются в Dependencies.
Код вне модулей и ядро не должны ссылаться на отключаемый модуль. Если такая ссылка
есть, отключение модуля сломает сборку. Тогда либо разорвите связь (точка расширения
через MethodHook, событие, интерфейс в ядре), либо отметьте модуль Is Required.
Отключите модуль в окне и нажмите «Применить». Если проект собрался, модуль готов. Ошибки компиляции покажут зависимости, которых нет в манифесте: добавьте их или разорвите связь, затем включите модуль обратно.
Интеграция — модуль с группой «Интеграции»: связка SDK со сторонним плагином площадки, аналитики и подобным. Такие модули показаны на вкладке «Интеграции».
Интеграции с одинаковым Slot исключают друг друга. На вкладке они идут переключателем:
выбирается один модуль или «Не подключено». Выбор модуля отключает остальные модули слота.
Вкладка группирует интеграции по платформе сборки (поле Platform), внутри — по слотам. Слот действует в пределах
своей платформы: «Магазин» на Android и «Магазин» на PC друг другу не мешают.
| Платформа | Слот | Модули |
|---|---|---|
| WebGL | Площадка | YG2.Integration (Яндекс Игры), GamePush.Integration, Pikabu.Integration (Пикабу Игры), VK.Integration (VK Games: ВКонтакте и Одноклассники) |
| Android | Магазин | RuStore.Integration (покупки RuStore Pay) |
| Android | Реклама | YandexMobileAds.Integration (РСЯ), GoogleMobileAds.Integration (AdMob) |
| PC | Магазин | Steam.Integration (Steamworks.NET) |
Код нативных интеграций, кроме настроек, обёрнут ещё и в символ платформы (UNITY_ANDROID, UNITY_STANDALONE_*):
в чужую сборку он не попадает, а их приоритет переопределения (4) ниже веб-площадок (5), поэтому в сборке под Android
или PC они перекрывают веб-площадку, если её забыли выключить. Настройки таким символом не обёрнуты: иначе при сохранении
ассета под другой платформой их поля пропали бы. При активной платформе WebGL Unity нативный код не компилирует —
его проверяют csc с символами нужной платформы.
Чтобы добавить ещё одну площадку, окно править не нужно:
- Сложите её адаптеры в свою папку, например
GamePush.Integration. - Создайте в ней
Module.asset:Group— «Интеграции»,Slot— «Площадка»,Plugin FolderиPlugin Modules File— по плагину площадки. Если плагин попадает в сборку сам (.jslib,.jspre, автозапуск, обработчики сборки), включитеHide Plugin When Disabledи задайтеWeb GL Template. - Оберните файлы кнопкой «Обернуть».
- Адаптеры подключайте атрибутом
[OverrideProperty(typeof(IServerTime), приоритет)], как это сделано вYG2.Integration. Общий код о площадке знать не должен.
Без включённой площадки SDK работает на реализациях по умолчанию.
Символ модуля вырезает только код интеграции. Плагин площадки остаётся в проекте и сам встраивается
в страницу: его .jslib и .jspre, автозапуск SDK площадки, обработчики сборки. Поэтому у модулей
площадок включён Hide Plugin When Disabled, и «Применить» (PRModulePlugins):
- возвращает папку плагина включаемого модуля (
GamePush~→GamePush). Не вышло — символы не пишутся: без плагина модуль не соберётся; - пишет символы;
- прячет папку плагина отключённого модуля (
PluginYourGames→PluginYourGames~) и ставит шаблон WebGL включённого модуля.
.meta папки на время прятанья лежит внутри неё (.folder.meta), поэтому GUID папки и файлов в ней
сохраняются. Переименование не проходит, если файл плагина держит открытым другая программа: окно
назовёт папку, и её можно переименовать руками. Папку, которая не на своём месте, окно и «Проверка
проекта» показывают предупреждением, «Применить» её исправит.
Если интеграция включена, а папки плагина в проекте нет, проект не соберётся. Окно и
«Проверка проекта» об этом предупреждают. В проекте, который ещё ни разу не собрался,
окно не откроется: добавьте символ PRSDK_DISABLE_<Id> в Player Settings вручную.
- PRUnitySDK → Модули.
- Поставьте или снимите галки. Пока не нажата «Применить», ничего не меняется, справа видно «будет отключён» или «будет включён». «Сбросить» возвращает текущее состояние.
- «Применить». Окно покажет, что изменится, и после подтверждения запишет символы во все платформы. Проект пересоберётся один раз.
Что окно не даст сделать:
- отключить модуль, пока включены модули, которые от него зависят. Окно назовёт их: сначала отключите их;
- отключить модуль с файлами без обёртки. Окно предложит обернуть их;
- отключить обязательный модуль;
- применить набор, в котором включены два модуля одного слота.
При включении модуля окно предложит включить и его выключенные зависимости.
Символы лежат в Player Settings → Other Settings → Scripting Define Symbols
и выглядят как PRSDK_DISABLE_BOOSTERS. Если на другой платформе набор отличается,
окно предупредит, а «Применить» выровняет все платформы.
Если после «Применить» проект не собрался, окно продолжает работать на прошлой сборке: включите модуль обратно. В крайнем случае удалите символ из Player Settings вручную.
- Компоненты модуля на сценах и префабах становятся Missing Script. Unity хранит их данные, после включения всё вернётся, но такие сцены и префабы лучше не пересохранять.
- Поля, которые модуль добавляет в
PRSDKSettingsиPRSDKDatabaseчерез partial, пропадают при сохранении этих ассетов. - Данные модуля в сохранениях игроков пропадают при первом сохранении в билде без него.
- Ассеты модуля остаются в билде, если на них ссылаются или они лежат в
Resources. Вырезается только код.
| Тип | Роль |
|---|---|
PRModuleManifest |
ассет-описание модуля |
PRModulePart |
ассет дополнительной папки модуля |
PRModuleCatalog |
находит модули и раскладывает по ним скрипты |
PRModuleGuard |
читает, ставит и снимает обёртку файла |
PRModuleDefines |
читает и пишет символы PRSDK_DISABLE_* во все платформы |
PRModulesWindow |
окно модулей |
PRModuleValidator |
проверка «Модули SDK» для окна «Проверка проекта» |
PRModulePlugins |
прячет и возвращает папки плагинов, ставит шаблон WebGL |
Всё это код редактора и в билд не попадает.