Giter Club home page Giter Club logo

unitydatakeepers's Introduction

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 (содержимое которой удаляется при мерегенерации скрииптов).

unitydatakeepers's People

Contributors

radomyrslaboshpytskyi avatar raslab avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

unitydatakeepers's Issues

Потабличная загрузка киперов

Разработать механизм, который позволяет загружать киперы потаблично.
По основной части, это сделанно для того чтоб иметь возможность загружать большие БД в билд. У Google-скриптов таймаут работы 15 минут и они не потянут большие данные.

Версионность внутри билда

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

х64 х86

Внедрить поддержку всех платформ, которые поддерживает SQLite (как по платформам, так и по разрядностям)

Логирование ошибок

Выводить в консоль юнити ошибки (или выбросить алерт пользователю), которые выдает бекенд, при загрузке таблиц.

Обновление киперов внутри билда

Внедрить фичу, которая позволит в риалтайме, внутри установленного билда, перезатянуть данные киперов.
Возможно, тут будет актуален еще какой-то интерфейс по настроке киперов (либо UI интерфейс, либо какая-то система управления с кода).

Рассмотреть реализацию бекенда

Рассмотреть разные варианты реализациии бекенда.
Рассмотреть вариант реализации промежуточного сервера, позволяющего менеджить версии таблиц под каждого юзера и храрнить их на сервере в "упакованном" виде.

Оптимизирвоать перезаливку БД

На слабых процессорах БД из JSON сильно долго переливается в БД внутри редактора. Рассмотреть варианты и оптимизировать этот процесс.

Уничтожить синглтоны

Заменить использование синглтонов киперов на локальные их обьявления.
Это немного усложнит работу с киперамии, но срежет много ошибок при работе с ними.

UnitTests

Внедрить поддержку юнит-тестов.
Разделить проект на 2 части: плагин, встраеваемый в юнити (в виде в dll файла) и проект визуалки с исходниками.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.