项目结构
分清 GCS 包内容、随包 Demo 与项目自有数据,让包更新、内容创作和正式资产各自保持清晰边界
完成场景初始化后,Project 窗口中会同时出现 GCS 包内容与项目自有内容:Assets/TinyGiants/ 提供运行时、编辑工具和随包 Demo;创建自定义数据库时,GCS 会生成 Assets/TinyGiantsData/,用来保存当前游戏的卡牌、单位、状态、卡组与遭遇战
两类内容可以互相引用,但更新方式和维护职责并不相同
先分清包内容与项目内容
GCS 的默认目录边界如下:
📦 Assets/
├── 🏢 TinyGiants/
│ ├── 📁 GameCardSystem/ # GCS 包根目录
│ │ ├── ⚙️ Runtime/ # 运行时引擎、数据模型与公开 API
│ │ ├── 🛠️ Editor/ # Game Card Editor、FlowGraph 与 Monitor
│ │ ├── 🎮 Demo/ # 可运行、可拆解的完整参考项目
│ │ │ ├── 🎨 Content/ # Demo 美术、Prefab、音频与表现资产
│ │ │ ├── 🗄️ Databases/ # 六个预设数据库
│ │ │ ├── ⚔️ Scenes/ # 12 个职业战斗场景与 1 个队伍场景
│ │ │ ├── 💻 Scripts/ # Demo 棋盘、UI、表现与音频脚本
│ │ │ └── 🛠️ Editor/ # 仅服务于 Demo 的编辑器工具
│ │ ├── 🔌 Integrations/GES/ # 可选的 GameEventSystem 集成
│ │ ├── 📘 Docs/ # 包内文档入口
│ │ ├── 📝 Changelog.md # 当前版本的功能记录
│ │ ├── 📖 Readme.txt # 包入口、菜单与支持链接
│ │ └── ⚖️ LICENSE.txt # 授权条款
│ └── 🔧 Shared/ # TinyGiants 共用基础设施
└── 💾 TinyGiantsData/GameCardSystem/ # 项目自有 GCS 数据根目录
├── 🃏 CardDatabases/
├── 🗂️ DeckDatabases/
├── ✨ StatusDatabases/
├── 🗺️ EncounterDatabases/
├── 🦸 PlayerUnits/
└── 👹 EnemyUnits/
Assets/TinyGiants/GameCardSystem/ 随包安装并随版本更新,而Assets/TinyGiantsData/GameCardSystem/ 则由当前项目持有,并在创建第一份对应类型的自定义数据库时逐级生成,这项边界决定了哪些文件应当视为产品包,哪些文件属于游戏本身
GCS 包目录提供什么
| 目录 | 内容 | 什么时候进入 |
|---|---|---|
Runtime/ | ScriptableObject 数据模型、战斗状态机、FlowGraph 执行器、状态系统、事件与 GCSApi | 通过公开 API 接入战斗或开发运行时扩展 |
Editor/ | Game Card System 面板、六模式 Game Card Editor、FlowGraph Editor、Monitor 与自定义 Inspector | 使用编辑工具或核对编辑器行为 |
Demo/ | 预设内容、战斗场景、棋盘 UI、表现层脚本、音频与参考行为图 | 学习完整接线方式或验证功能 |
Integrations/GES/ | TG_GES_INSTALLED 启用后的 GES 事件桥接 | 项目同时使用 GameEventSystem 时 |
Docs/ | 指向在线文档的包内入口 | 从 Unity Project 窗口打开文档时 |
Changelog.md | 当前版本已经交付的核心能力 | 升级前核对版本变化时 |
Readme.txt 与 LICENSE.txt | 常用入口、支持方式与授权范围 | 初次导入或确认使用边界时 |
日常内容创作不需要直接修改 Runtime/ 或 Editor/,卡牌、卡组、单位、状态与遭遇战都由 Game Card Editor 创建和维护,自定义节点与 Workbench Inspector 扩展源码由网站单独提供,因此不会出现在已安装的包体目录中
Demo 是一套完整的参考项目
Demo/ 把内容数据、场景接线与表现资源组织成一套可以直接运行和检查的卡牌肉鸽战斗,它使用正式的 Game Card Editor、FlowGraph、运行时与表现接口,因此既能验证安装结果,也能作为项目接线的参考基线
Demo/Scenes/Single-Character/ 中的 Hunter、Mage、Priest 与 Warrior 各包含普通、精英与 Boss 三场战斗,这 12 个场景统一采用 <序号>-<名称>.unity 命名;Multi-Character/ 则提供三角色 Party Showcase.unity,例如可以直接打开
Demo/Scenes/Single-Character/Hunter/1-Fenmoss Hollow.unity
Demo/Scenes/Single-Character/Hunter/2-The Spore Bog.unity
Demo/Scenes/Single-Character/Hunter/3-Mire of the Reaper.unity
Demo/Scenes/Multi-Character/Party Showcase.unity
单角色场景引用 Demo/Databases/Single-Character/ 中的六个预设数据库,Party Showcase 引用 Demo/Databases/Multi-Character/ 中的六个多人数据库;Demo/Scripts/ 与 Demo/Content/ 则为两类场景提供共用的棋盘、手牌、单位、HUD、意图、状态、奖励、音频与视觉效果
场景、数据和表现由引用连接,而不是依靠目录名称自动关联
两套彼此隔离的数据库
每个目录都包含 GCS 六类核心内容各自对应的数据库,场景初始化只激活当前场景使用的一套数据,因此 Workbench 列表保持聚焦,多人玩法专用内容也不会改变原有预设数量
| 目录 | 数据库与内容 |
|---|---|
Single-Character/ | 六个 Preset*Database:80 张 Card、16 个 Deck、12 个 Player、16 个 Enemy、30 个 Status、12 个 Encounter |
Multi-Character/ | 六个 Party*Database:6 张 Card、1 个 Deck、3 个 Player、3 个 Enemy 定义、5 个 Status、1 个 Encounter |

上图展示的是原有预设数据库,资产存在于磁盘并不等于已经进入主动内容集合,只有注册到 GameCardManager 且处于 Active 状态的数据库才会参与对应类型的主动枚举,注册、排序与 Active 规则见数据库管理
表现资产按所属对象组织
| 目录 | 存放内容 |
|---|---|
Cards/<Type>/ | Basic、Burst、Curse、Skill 与 Support 的类型底图、Artwork 和卡牌 Prefab |
Decks/ | 四个职业的初始卡组与奖励卡组图像 |
Units/Player/<Class>/ | Hunter、Mage、Priest 与 Warrior 的玩家单位美术与 Prefab |
Units/Enemy/<Family>/ | 按职业敌人族组织的美术与 Prefab |
Units/Prefabs/ | 多个单位共同使用的表现组件 |
Statuses/ 与 Intents/ | 状态、意图图标,以及各自的 UI Prefab |
Encounters/<Class>/ | 每个职业的战斗背景、分层素材与遭遇战 UI 资产 |
Art/ | 跨对象共享的 Audio、Fonts、Materials、Prefabs、Resources、Shaders、Sprites 与 VFX |
这些目录按资产所属对象组织,同一类卡牌、同一支敌人族或同一职业的美术与 Prefab 会尽量集中在一起,替换表现时可以从对象目录直接找到关联资源,只有跨对象共用的内容才会进入 Art/
自定义节点示例
下载 GCS-Samples.zip 并在 Unity 项目外解压,压缩包只包含源码文件与 Assembly Definition,不含 Unity .meta 文件;把解压后的 Samples~ 保留在项目外,再将需要的源码复制到 Assets/ 下的项目自有运行时程序集
Samples~/CustomNodes/Templates/ 为七个公开节点家族各提供一份可复制文件,Samples~/CustomNodes/Examples/ 则为每个家族提供一个完整实现,扩展节点时只修改复制到项目中的副本,属性、继承关系、端口与执行上下文的完整约定见自定义节点
项目自有的 Workbench Inspector 扩展
派生内容类型、序列化字段、Inline 设置与选项 Provider 应放在项目运行时程序集,自定义 UI Toolkit 控件、Inspector 校验与直接调用 TGDropdown 的代码应放在对应的 Editor-only 程序集
下载压缩包中的 Samples~/InspectorExtensions/ 展示了这套完整拆分,这里的 Runtime 表示代码可以进入 Player Build,并不表示这些文件只负责运行时界面;派生内容定义、选项 Provider 与强类型访问代码需要供运行时代码使用,Workbench 也会读取其中的 Inspector 元数据,因此它们按职责放在 Runtime 下的不同目录中,Editor 侧只保留 Registry 注册、校验、全宽 UI Toolkit 字段与直接使用 TGDropdown 的示例
Assets/YourGame/GCS/
├── Runtime/ # Player 可用的内容类型与数据
│ ├── ContentTypes/ # 六个 Workbench 内容类型
│ │ ├── SampleCard.cs
│ │ └── ...
│ ├── Options/
│ │ └── SampleInspectorOptionProviders.cs
│ └── Access/
│ └── SampleCardRuntimeAccess.cs
└── Editor/ # Workbench 控件与校验
└── SampleInspectorRegistration.cs
这些文件属于项目内容,不应放进 GCS 包的 Runtime/ 或 Editor/ 目录;Inspector 扩展说明六种派生内容类型、序列化字段布局与运行时访问,Inspector 控件说明 Editor 注册、校验与共享下拉契约
把正式内容放进项目数据根目录
Game Card Editor 与 GameCardManager Inspector 创建自定义数据库时,默认把资产写入如下位置:
Assets/TinyGiantsData/GameCardSystem/
六类数据库各自进入固定子目录,数据库内创建的内容会作为该数据库的子资产保存
| 子目录 | 保存内容 |
|---|---|
CardDatabases/ | 自定义卡牌数据库及其中的卡牌 |
DeckDatabases/ | 自定义卡组数据库及其中的初始卡组、奖励卡组与其他卡组 |
PlayerUnits/ | 自定义玩家单位数据库及其中的玩家单位 |
EnemyUnits/ | 自定义敌人数据库及其中的敌人单位 |
StatusDatabases/ | 自定义状态数据库及其中的状态 |
EncounterDatabases/ | 自定义遭遇战数据库及其中的遭遇战 |
点击 Game Card System 面板中的 Quick Access > Custom Data 可以直接打开 GCS 当前识别到的数据根目录,如果项目已有自己的资产规范,也可以在 Assets/ 内整体移动 TinyGiantsData/GameCardSystem/,但必须保留 TinyGiantsData 与 GameCardSystem 这两级目录名,移动完成后,GCS 会通过其中的 Card Database 重新定位实际路径
-
随包 Demo 用于运行、检查和对照,不作为正式项目的内容工作区
-
正式内容在自定义数据库中创建,需要时再引用 Demo 的美术、Prefab 或行为图
-
包内容与项目数据保持分离后,版本更新不会覆盖项目资产,Demo 也能保留为未经修改的参考基线
明确这些目录边界后,可以通过第一场战斗观察单角色数据库、场景对象与表现资产如何共同运行,也可以在Demo 场景中继续核对四条职业线和 Party Showcase 与随包内容的对应关系