Парсер Google Spreadsheets таблиц для конфигов
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-01 20:32:13 +07:00
Cli [ai] Parser: callback завершения прохода 2026-11-01 19:24:31 +07:00
Converters [ai] Parser: пропуск пустых строк массива 2026-10-09 17:40:07 +07:00
Filters #86c668vkz Фильтры 2025-11-05 16:59:45 +07:00
Helpers [ai] Parser: общий FindGlobalConfig 2026-10-07 18:13:03 +07:00
Model [ai] Parser: CLI-команда parse_gsheets 2026-10-07 18:13:03 +07:00
Parser [ai] Parser: callback завершения прохода 2026-11-01 19:24:31 +07:00
Services [ai] Форматирование цепочки InnerException в логах GoogleSheetsService 2026-08-19 12:16:21 +07:00
Window [ai] Parser: callback завершения прохода 2026-11-01 19:24:31 +07:00
.gitignore [ai] Parser: CLI-команда parse_gsheets 2026-10-07 18:13:03 +07:00
FG.Editor.GoogleSheets.asmdef [ai] Добавление ссылки на Unity.Pipeline.Attributes 2026-10-12 17:44:21 +07:00
README.md [ai] Parser: callback завершения прохода 2026-11-01 19:24:31 +07:00

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 данные ресурсы необходимо поместить вне директории пакета

  1. Наличие credentials.json из Google Cloud Platform.
  2. Созданный и настроенный конфиг (в 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.