跳至主要內容
SheetForge

SheetForge — 以試算表驅動的 Unity 資料管線

SheetForge 會將一份試算表(Google 試算表或本機 TSV/CSV/xlsx)轉換為強型別的 C# 類別,以及供遊戲以穩定位址載入的烘焙後 ScriptableObject。

每個儲存格都會在匯入時被驗證。錯誤的值會在你匯入的當下就被攔截,而不是等到執行期第一次讀到該列才發現。並以一句話回報其分頁、列、欄,以及建議的修正方式。這條管線的運作方式就像編譯器:它會在單一輪次中蒐集所有錯誤,並只從一份完全乾淨的試算表組裝出不可變的定義。

試算表永遠是唯一真實來源;烘焙後的 SO 僅是查詢用的快取。圍繞這一點:

  • 往返回寫。 匯入有一條反向路徑:匯出/推送會將數值寫回試算表,同時保留其結構。
  • 編輯器內編寫。 編輯器內建的一個編寫視窗——Data Studio——可直接編輯試算表,並具備 Ctrl+Z 復原功能。
  • 在地化 UI。 產品 UI 支援 10 種語言。
  • 透過外掛擴充。 外掛可以在不修改 Core 的前提下新增儲存格型別、驗證規則、圖形邊,以及匯入來源。這道邊界由 C# 編譯器強制把關。

公開 API 本身就是一個編寫核心:第二個編寫介面(例如節點圖畫布)可以完全建構於其上,且無需變更 Core 或 Editor——請參閱編寫核心

需求:Unity 6 以及 Addressables 套件(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;每個出口皆由此衍生而來。任何地方只要出現一個錯誤,就完全不會有輸出——不會有部分組裝的結果。

每個錯誤都會告訴你:

  • 在哪裡 — 分頁.列.欄字母及欄位名稱
  • 是什麼 — 有問題的值
  • 為什麼 — 違反的規則
  • 怎麼修 — 可執行的建議

這取代了一個團隊原本得為每張表各自撰寫的東西:剖析器、驗證器、程式碼產生器,以及載入路徑。

關鍵數據

  • 50,000 列 × 20 欄的匯入作業,在實際運作的編輯器(Mono)中約 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)、完整型別系統、enum 定義試算表、語法規則
Data Studio編寫介面——查詢、搜尋、儲存格編輯、結構編輯、記錄畫布、Ctrl+Z、預檢驗證
來源、匯出與推送本機與 Google 來源、提供者設定、匯出往返流程、推送安全防護、寫入試算表的下拉選單
Google 試算表設定建立服務帳戶與 JSON 金鑰、分享試算表、讓 SheetForge 指向該金鑰
在地化10 種語言 UI、依使用者設定語言、選單重新產生、新增翻譯
在地化試算表你遊戲的文字化為一份試算表——@loc 語言欄、LocRef 參照、鍵值常數、Unity Localization StringTable 橋接,以及翻譯工作流程
外掛開發16 種外掛合約(儲存格型別、驗證器、邊、標記、範本、畫布覆寫、程式碼註冊表、主題、宣告式編寫介面、UI 字串、管線觀察者、來源、Studio 小工具/動作/儲存格編輯器/面板)+ 選用能力,包括讓自訂記法擁有完整參照對等性——以零 Core 修改新增一個領域
編寫核心在公開引擎 API 之上建構第二個編寫介面(例如圖形畫布)
API 參考完整的公開 API 介面——依組件列出每個公開型別
功能與限制完整列出哪些功能可行、哪些不行,以及原因
常見問題與疑難排解首次執行與整合過程中的問題,並附上解法
SheetForge Web瀏覽器版隨附應用——編譯自相同核心的 WebAssembly,具備編寫/驗證/反射對等性,適用時機
Web 外掛市集從登錄庫安裝外掛(一鍵、雜湊固定)、相容性關卡、以 GitHub URL 側載未經審查的外掛、Unity 內建的市集視窗
Web Google 試算表存取透過你自己的 OAuth,從已部署的網站讀寫 Google 試算表,以及服務帳戶金鑰僅限本機的規則

SheetForge Web(隨附應用)

位於 web.sheetforge.workers.dev 的隨附網頁應用,將編寫、驗證與試算表反射能力帶進瀏覽器。

它會將相同的 C# 核心編譯為 WebAssembly——而非重新實作——因此剖析器與驗證器永遠不會偏離 Unity 素材,且以 Unity 建置的外掛 DLL 可原封不動載入。程式碼產生與烘焙仍僅由 Unity 端負責;網頁端的輸出則是反射後的試算表。

上方三個 Web 頁面依序涵蓋這個應用程式、它的外掛市集,以及它的 Google 試算表存取功能。本站的每一條試算表語法規則——包括 IntId@Tab 參照對等性——在瀏覽器中同樣完全成立。

設計原則

  1. 試算表才是唯一依據。 直接編輯 SO 並不是一種工作流程;所有變更都必須透過試算表並重新匯入驗證。(有一個「測試編輯」切換開關可供暫時性的執行期實驗使用——此類變更絕不會被寫回,且會在重新匯入時消失。)
  2. 蒐集所有問題,絕不組裝任何有瑕疵的結果。 驗證絕不會在第一個錯誤處就停止,而只要有一個錯誤,就完全不會有輸出——你只需一次修正完整的錯誤清單,而不必陷入「修一個、重新匯入一次」的迴圈。
  3. 所見即所得的編寫方式。 在 Data Studio 中,你所暫存的每一項變更都會立即以最終呈現的樣貌顯示——新增的欄會出現、刪除的列會消失,而這一切都發生在寫回試算表之前。
  4. 全自動化。 完成一項編寫操作後,程式碼產生 → 重新編譯 → 烘焙會自動完成,橫跨網域重新載入的過程中,你都不需要再手動觸發任何動作。
  5. 開放封閉式擴充。 新的儲存格型別、驗證規則、圖形邊與匯入來源,皆透過註冊的方式加入——管線本身永遠不會被修改。
  6. 已記錄的限制。 產品做不到的事情,會和它能做到的事情一樣被精確記錄下來。請參閱功能與限制
  7. 開放資料。 真實資料就是一份純粹的 TSV/CSV/xlsx 檔案,或一份 Google 試算表,任何工具都能讀取。移除 SheetForge 只會移除管線,不會移除你的資料。

相關頁面