- C# 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| Cli | ||
| Converters | ||
| Filters | ||
| Helpers | ||
| Model | ||
| Parser | ||
| Services | ||
| Window | ||
| .gitignore | ||
| FG.Editor.GoogleSheets.asmdef | ||
| README.md | ||
GoogleSheets
Парсинг таблиц с конфигурацией игры из Google Spreadsheets в конфиги внутри проекта.
Документация: Slite
Поддерживаемые форматы парсинга:
- Json
Пустые строки в массивах конфигов:
В режиме HorizontalArray строка не добавляется в JSON-массив, если после обработки колонок у неё нет ни одного поля. Пустые ячейки, пробелы, табуляция и неразрывные пробелы не создают записи {}; данные только в игнорируемых колонках тоже не создают запись.
Неполные записи сохраняются для проверки валидатором. Значения 0, false и вложенный {} не считаются пустыми. Невидимые символы вроде U+200B не удаляются: они остаются значением поля.
Зависимости:
Не поставляются с репозиторием. Необходимо на целевом проекте подключить самостоятельно в
FG.Editor.GoogleSheets.asmdef
Dll:
доступно в Google Drive
- Google.Apis.1.69.0
- Google.Apis.Auth.1.69.0
- Google.Apis.Core.1.69.0
- Google.Apis.Sheets.v4.1.69.0.3694
- Newtonsoft.JSON
AsmDef:
- UniTask
Требования:
При подключении как sub-module данные ресурсы необходимо поместить вне директории пакета
- Наличие
credentials.jsonиз Google Cloud Platform. - Созданный и настроенный конфиг (в Unity
Create->FG->Google Sheets Parser Config)
Запуск:
В Unity: Tools -> FG -> Google Sheets Parser
Завершение парсинга
- Событие:
GoogleSheetsParserEvents.ParseCompleted(Action<GoogleSheetsParseReport>). - Вызывается окном и командой Pipeline
parse_gsheets. - Один вызов после прогона и необходимого обновления Asset Database, включая ошибки.
report.Success— итог прогона; причины ошибок находятся в отчёте.report.Applyотличает запись от dry-run; событие приходит в обоих случаях.- Обработчики синхронные; длительную работу запускайте отдельно.
- Исключение одного обработчика не мешает остальным.
- Снимайте подписку при завершении работы подписчика:
GoogleSheetsParserEvents.ParseCompleted += OnParseCompleted;
GoogleSheetsParserEvents.ParseCompleted -= OnParseCompleted;
CLI-запуск (parse_gsheets):
Команда parse_gsheets доступна через com.unity.pipeline в работающем Editor и в headless-режиме. Примеры — из директории Unity-проекта (CDC.Unity):
# Сухой прогон (по умолчанию): данные скачиваются и конвертируются, файлы не пишутся и не удаляются
unity command --project-path . --format json --timeout 60 parse_gsheets -- --mode tables --tables "[CDC] [Meta] Gallery"
unity command --project-path . --format json --timeout 600 parse_gsheets -- --mode all
# Применение записи и очистки orphan-конфигов
unity command --project-path . --format json --timeout 60 parse_gsheets -- --mode sheets --sheets "Photo" --apply true
# Headless-вариант для CI
unity run . --command parse_gsheets --format json --timeout 600 -- --mode tables --tables "[CDC] [Meta] Currency" --apply true
Аргументы:
mode— режим выборки:all(все таблицы реестра),tables(перечисленные таблицы),sheets(указанные листы).tables— имена таблиц через запятую (EditorTableNameиз конфига парсера, равен названию таблицы в Google, например[CDC] [Meta] Gallery); дляmode=tablesобязателен, дляmode=sheetsработает как фильтр.sheets— имена листов через запятую; только дляmode=sheets.apply— писать и удалять файлы; без флага прогон сухой (apply=false).refresh— вызватьAssetDatabase.Refresh()даже безapply; послеapplyобновление выполняется всегда, чтобы Unity создал.meta.
Сухой прогон — режим по умолчанию: парсер реально скачивает и конвертирует данные, но ничего не пишет и не удаляет; отчёт показывает тот же written[]/deleted[], что был бы применён. Пишите только после сверки отчёта; неожиданный файл в deleted[] — повод остановиться.
Отчёт (результат — в поле result; итог прогона читается из result.success, а не из конверта пайплайна):
{
"success": true,
"mode": "tables",
"apply": false,
"errors": [],
"tables": [
{ "name": "[CDC] [Meta] Gallery", "sheets": [
{ "name": "Photo", "status": "success", "written": ["Assets/FG/CDC.Shared/Defs/..."], "deleted": [], "errors": [] }
] }
]
}
written[] и deleted[] — пути от корня проекта с префиксом Assets/; deleted[] — файлы и папки, удаляемые веткой очистки orphan-конфигов. Ошибки отдельного листа не прерывают прогон и собираются в errors[] этого листа, а итог становится success=false.
Таймаут клиента unity CLI по умолчанию — 30 с, чего полному прогону не хватает: точечным вызовам нужен --timeout 60, mode=all — --timeout 600. Порядок работы агента описан в скилле run-sheets-parser.