Unity Data Keepers

OTHER
by radiys92

Data keepers tools for Unity3D

( Crawled an hour ago )
+

UnityDataKeepers

Текущая версия: 0.0.5

UnityDataKeepers - инструмент, созданный для легкого управлениия данными приложения.

UnityDataKeepers состоит из двух частей:

  • Бекенд из гугл-таблиц
  • Плагин, внедряемый в Unity3D-проект

Бекенд предназначен для того, чтоб можно было в удобной табличной форме создавать и управлять данными игры. Плагин - вторая часть, которая может функционировать как самостоятельно, так и подключаться к бекенду для забора актуальных данных.

  1. Основные фичи
  2. Основные цели системы
  3. Установка
  4. Обновления
  5. FAQ

Основные фичи

  1. Удобный и понятный интерфейс ввода и редактирования данных через гугл-таблицы
  2. Валидация данных и выстроение уровней доступа благодаря функционалу гугл-доков
  3. Полная поддержка использования формул в гугл-доках
  4. Поддержка сборных версий как всей базы данных, так и отдельных ее таблиц. Поддержка контроля версий таблиц за счет встроенных средств гугл-доков
  5. Сворачивание таблиц и скачивание их в проект привязываясь только к Id служебного скрипта и Id основной таблицы
  6. Сохранение всех скачанных в проект версий и возможность в любой момент выставить любую из них как актуальную
  7. Автоматическая генерация кода на основе данных из скачанных таблиц.
  8. Полнойстью автономная система чтения, правки и хранения данных внутри клиента, поддерживаемая на большинстве платформ (стационарные и мобильные платформы - да, остальные не тестириовались).

Основные цели системы

  • Ориентация как на удобство для разработчиков на уровне кода, так и для гейм-дизайнеров на уровне введения, тестирования и правки данных:
    • Достаточно простой и "человеческий" интерфейс для геймд-дизов в виде гугл-таблиц с поддержкой всех их плюшек (начиная от валидации данных и просмотром истории сохранений и заканчивая простым настраиванием уровней доступов).
    • Легкость интегрирования в любой 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
  • Добавлена поддержка кастомных киперов: если данные киперы не заданы предварительно, он создаст их автоматически

FAQ

На чем работают киперы?

Локальная база данных обслужиивается с помощью SQLite 3.11.1

Каким образом данные передаются из таблиц в проект?

Все таблицы складываются в JSON и скачиваются плагином. После этого плагин хранит их в виде JSON и, по необходимости, десериализует в таблицы билда.

Как мне расширять функционал киперов, но чтоб он не удалялся каждый раз при перегенерации киперов?

Киперы созданы как partial-классы, их функционал можно расшиирять в любом месте за пределами папки Assets/Scripts/Generated (содержимое которой удаляется при мерегенерации скрииптов).