跳至主要内容
SheetForge

SheetForge — 面向 Unity 的工作表驱动数据管线

SheetForge 会把一张工作表(Google表格或本地 TSV/CSV/xlsx)转换成强类型的 C# 类,以及供你的游戏按稳定地址加载的烘焙 ScriptableObject。

每个单元格都会在导入时被校验。错误的值会在你导入的那一刻就被发现,而不是等到运行时首次命中该行才暴露。诊断信息会以一句话的形式给出,并标明其所在的标签页、行、列,以及一个建议的修复方法。这套管线的运作方式就像编译器:它会一次性收集所有错误,只有在工作表完全干净的情况下才会组装出不可变的 Definitions。

工作表始终是唯一真实来源;烘焙出的 SO 只是一个查找缓存。由此:

  • 往返。 导入拥有一条反向路径:导出/推送会把取值写回工作表,同时保留其结构。
  • 编辑器内创作。 编辑器内的创作窗口——Data Studio——以 Ctrl+Z 撤销的方式编辑工作表。
  • 本地化 UI。 产品 UI 提供 10 种语言。
  • 插件扩展。 插件可以在不修改 Core 的前提下新增单元格类型、验证规则、图边和导入来源。这一边界由 C# 编译器强制保证。

公共 API 本身就是一个创作内核:第二个创作界面(例如节点图画布)可以在其之上构建,无需对 Core 或 Editor 做任何改动——参见创作内核

环境要求:Unity 6Addressables 包(com.unity.addressables)——运行时加载是按地址进行的。没有该包,本资源依然可以编译,但管线会保持锁定状态,直到该包安装完成。引导式安装步骤参见快速上手

工作原理一览

              ENTRANCES                    TRUTH                       EXITS
  ┌───────────────────────────┐   ┌──────────────────┐   ┌───────────────────────────────┐
  │ Google Sheets (SheetsApi/ │   │                  │   │ Strongly-typed C# classes     │
  │   ExportUrl)              │──▶│  Immutable IR    │──▶│   (codegen, last stage)       │
  │ Local TSV / CSV / xlsx    │   │  (Definitions)   │   │ Per-tab Database SO (bake)    │
  │ Data Studio (in-editor    │   │                  │   │   → Addressables address      │
  │   authoring, WYSIWYG)     │   │  built ONLY if   │   │   "SheetForge/{tab}"          │
  │ Custom source providers   │   │  validation is   │   │ Export / Push back to the     │
  │   (plugin, e.g. DB/REST)  │   │  100% clean      │   │   sheet (round-trip)          │
  └───────────────────────────┘   └──────────────────┘   └───────────────────────────────┘

每个入口都会产出相同的、经过验证的 IR,每个出口都由它派生而来。任何地方出现一个错误,都意味着完全没有输出——不会有部分组装的结果。

每个错误都会告诉你:

  • 在哪里——标签页·行·列字母及字段名
  • 是什么——出问题的值
  • 为什么——违反的规则
  • 怎么办——可执行的修复建议

这取代了团队原本需要为每张表分别编写的东西:解析器、验证器、代码生成器,以及加载路径。

关键数据

  • 在实时编辑器中(Mono)导入 50,000 行 × 20 列 ≈ 628 ms;50 个标签页 × 2,000 行、含 180k 个引用单元格 ≈ 294 ms
  • 结构化错误代码——一份完整的验证参考。
  • 整个产品 UI(菜单、创作窗口、对话框、报告、工具提示)支持 10 种语言
  • 测试套件:由无头 .NET 测试与 Unity EditMode 测试组成的双重测试体系,0 个失败——确切数字见功能与限制 ▸ 已验证状态

文档导览

页面内容
快速上手环境要求(Unity 6、Addressables)、安装、设置、你的第一次导入、演示场景
核心概念工作表是唯一真实来源、IR、管线各阶段、作为缓存的烘焙 SO、baseline、自动导入链
表格语法标记(@name/@type/@desc/@overlap/@style/@enum/@loc)、完整的类型系统、枚举定义表、书写规则
Data Studio创作界面——查找、搜索、单元格编辑、结构编辑、记录画布、Ctrl+Z、预检验证
数据源、导出与推送本地与 Google 来源、提供方设置、导出往返、推送安全防护、写入工作表的下拉列表
Google表格设置创建服务账号与 JSON 密钥、共享工作表、让 SheetForge 指向该密钥
本地化10 语言 UI、按用户设置的语言、菜单再生成、添加翻译
本地化表格把游戏文本当作一张工作表来管理——@loc 语言列、LocRef 引用、键常量、Unity Localization StringTable 桥接,以及翻译工作流
插件开发16 种插件契约(单元格类型、验证器、边、标记、模板、画布覆盖、代码注册表、主题、声明式创作界面、UI 字符串、管线观察者、来源、Studio 部件/操作/单元格编辑器/面板)+ 可选启用的 capability,包括为你自己的表示法提供完整的引用对等性——零 Core 改动即可新增一个领域
创作内核在公共引擎 API 之上构建第二个创作界面(例如图形画布)
API 参考完整的公共 API 表面——按程序集列出每个公共类型
功能与限制哪些能做、哪些不能做、以及原因的完整清单
常见问题与故障排查首次运行问题与集成问题,附带修复方法
SheetForge Web浏览器配套应用——编译为 WebAssembly 的同一套核心,创作/验证/反射能力对等,以及何时该用它
Web 插件市场从注册表安装插件(一键安装、哈希锁定)、兼容性门禁、通过 GitHub URL 旁加载未经审核的插件、Unity 内的市场窗口
Web Google表格访问通过你自己的 OAuth,从已部署的站点读写 Google表格,以及仅限本地的服务账号密钥规则

SheetForge Web(配套应用)

配套的 Web 应用位于 web.sheetforge.workers.dev,把创作、验证与工作表反射带到浏览器中。

它编译的是同一套 C# 核心到 WebAssembly——而不是另一份重新实现——因此解析器与验证器永远不会与 Unity 版资源产生偏差,而且 Unity 构建的插件 DLL 可以原样加载。代码生成与烘焙仍然只属于 Unity 的职责;Web 端的输出是反射后的工作表。

上面这三个 Web 页面分别覆盖该应用本身、它的插件市场,以及它的 Google表格访问。本站的每一条表格语法规则——包括 IntId@Tab 的引用对等性——在浏览器中都同样成立。

设计原则

  1. 工作表具有权威性。 直接编辑 SO 不是一种工作流。一切都要经过工作表和重新导入验证。(存在一个"测试编辑"开关,用于临时的运行时实验——它永远不会被写回,并且会在重新导入时消失。)
  2. 收集所有信息,不组装任何有问题的结果。 验证从不会在遇到第一个错误时就停止,并且只要有一个错误就意味着没有输出。你只需一次性修复一份完整的问题清单,而不是"修一个、重导一次"地循环。
  3. 所见即所得的创作。 在 Data Studio 中,你所暂存的一切都会立即以最终落地的样子呈现——新增的列会出现,被删除的行会消失,这一切都发生在写入工作表之前。
  4. 全自动。 在一次创作操作之后,代码生成 → 重新编译 → 烘焙会自动完成,跨越域重载也无需你重新触发任何操作。
  5. 开闭式扩展。 新的单元格类型、验证规则、图边和导入来源通过注册即可加入——管线本身永远不会被修改。
  6. 有文档记录的限制。 产品做不到的事情,会被和它能做到的事情一样精确地记录下来。参见功能与限制
  7. 开放数据。 真实来源始终是一份普通的 TSV/CSV/xlsx 文件,或一张 Google表格,任何工具都能读取。卸载 SheetForge 只会移除这条管线,不会移除你的数据。

相关页面