Текущая версия: 0.0.5
UnityDataKeepers - инструмент, созданный для легкого управлениия данными приложения.
UnityDataKeepers состоит из двух частей:
- Бекенд из гугл-таблиц
- Плагин, внедряемый в Unity3D-проект
Бекенд предназначен для того, чтоб можно было в удобной табличной форме создавать и управлять данными игры. Плагин - вторая часть, которая может функционировать как самостоятельно, так и подключаться к бекенду для забора актуальных данных.
- Удобный и понятный интерфейс ввода и редактирования данных через гугл-таблицы
- Валидация данных и выстроение уровней доступа благодаря функционалу гугл-доков
- Полная поддержка использования формул в гугл-доках
- Поддержка сборных версий как всей базы данных, так и отдельных ее таблиц. Поддержка контроля версий таблиц за счет встроенных средств гугл-доков
- Сворачивание таблиц и скачивание их в проект привязываясь только к Id служебного скрипта и Id основной таблицы
- Сохранение всех скачанных в проект версий и возможность в любой момент выставить любую из них как актуальную
- Автоматическая генерация кода на основе данных из скачанных таблиц.
- Полнойстью автономная система чтения, правки и хранения данных внутри клиента, поддерживаемая на большинстве платформ (стационарные и мобильные платформы - да, остальные не тестириовались).
- Ориентация как на удобство для разработчиков на уровне кода, так и для гейм-дизайнеров на уровне введения, тестирования и правки данных:
- Достаточно простой и "человеческий" интерфейс для геймд-дизов в виде гугл-таблиц с поддержкой всех их плюшек (начиная от валидации данных и просмотром истории сохранений и заканчивая простым настраиванием уровней доступов).
- Легкость интегрирования в любой Unity-проект, и простой интерфейс взаимодействия с системой для программистов.
- Сведение к минимуму необходимости влезать в процесс работы с данными программисту.
- Простая масштабируемость как количества данных, так и команд разработчиков, которые могут работать с этим инструментом
- Система должна подходить как для простых проектов с единственной коллекцией внутренних настроек, так и для проектов масштаба экономических стратегий, в которых ежесекундно обновляется 10-15 коллекций данных.
- Система должна иметь простые и доступные возможности для контроля версий.
- Ведение разных версий таблиц для разных ролей (гейм-дизов, разработчиков, тестировщиков, продюссеров, т. п.)
- Ведение разных версий таблиц для разных типов сборок (дев, тест, релиз, т. п.)
- Ведение разных версий таблиц на уровне работы разработчика с проектом (сохранение всех загруженных ранее версиий таблиц и возможность вернутся в любой момент к любой их версии)
- Система должна иметь максимально простую и понятную механику работы
Для развертывания бекенда, нужно (пример развернутого бекенда можно найти тут):
- Создать таблицы с коллекциями (из первого примера это таблицы LocalizationKeeper, ResourcesKeeper и TypesTestKeeper). Для ведения этих таблиц нужно учесть следующие правила:
- Строки либо столбцы, в первой ячейке которых поставлен знак восклицания игнорируются при заборе в проект. Это можно Фактически, это аналог комментирования кода.
- Начало каждого столбца должно содержать название аттрибута.
- В столбце
Type
обязательно должен прописываться тип конечных данных. - Названия атрибутов, являющимися первичными ключами для таблицы, должны начинаться с знака восклицания. Первичный ключ - та связка данных, которая будет уникальна для каждой записи в таблицы; это может быть как простой, так и составной ключ (к приимеру, в таблице TypesTestKeeper это
Id
, а в таблице LocalizationKeeper это будут аттрибутыId
иLanguage
). В исходниках проекта они будут без знаков восклицания. - Можно свободно использовать формулы и прочие плюшки гугл-доков.
- В документе может быть сколько угодно страниц и они будут правильно обработанны, но на всех страницах должна быть одна и та же шапка.
- Создать корневую таблицу и внести в нее данные про таблицы коллекций (из первого примера это таблица Keepers). В корневой таблице обязательно должны быть аттрибуты
Type
иSheetAppId
, описывающие тип таблицы и идентификатор таблицы соответственно. - В корневой таблице добавить скрипт бекенда и сделать деплой, с настройками, указанными на скришнотах (исходный код для скрипта взять из файла
GoogleCodeSources/main.gs
):
Далее нужно скопировать содержимое папки UnityDataKeepersProj/Assets/Plugins/
в проект.
После импорта проекта у вас появится меню:
После открытия менеджера, у него будет следующий интерфейс:
С соответствующими кнопками:
- Load last keepers - загружает последнюю версию таблиц по введенному идентификатору скрипта бекенда и главной таблицы
- Generate sources - на основе выбранной версии загруженных ранее таблиц, создает исходный код киперов и загружает данные в базу киперов. ВАЖНО: Удаляет все исходники старых киперы и данные из них.
- Set as actual - задает в локальную базу киперов данные из выбранной загруженной ранее версии таблиц
- Remove - удаляет выбранную версию загруженных ранее таблиц
Version 0.0.5
- FEATURE: Additional default keeper getters
- FEATURE: Local editor DB3 file now locate at Temp directory
- FIX: ORM multi-PK generation
- FIX: PK field at class don't overload KeeperItem and base classes
Version 0.0.1
- Пофишкена генерация составных первичных ключей в ORM
- Добавлена поддержка кастомных киперов: если данные киперы не заданы предварительно, он создаст их автоматически
На чем работают киперы?
Локальная база данных обслужиивается с помощью SQLite 3.11.1
Каким образом данные передаются из таблиц в проект?
Все таблицы складываются в JSON и скачиваются плагином. После этого плагин хранит их в виде JSON и, по необходимости, десериализует в таблицы билда.
Как мне расширять функционал киперов, но чтоб он не удалялся каждый раз при перегенерации киперов?
Киперы созданы как partial-классы, их функционал можно расшиирять в любом месте за пределами папки Assets/Scripts/Generated
(содержимое которой удаляется при мерегенерации скрииптов).