概览
GameCardSystem (GCS) 是 TinyGiants 面向 Unity 研发的可视化卡牌肉鸽战斗框架,覆盖从内容创作到运行时的完整链路,系统基于 ScriptableObject 的 Workbench 模式,支持以全可视化的方式创作卡牌与战斗内容;内置的 FlowGraph 可视化流图体系,允许开发者在无需编写任何代码的情况下实现《月圆之夜》、《杀戮尖塔》等各类经典卡牌机制效果,此外,框架还提供了完善的底层 API与触发事件,以便你对运行时进行深度扩展

上图呈现了 GCS 从内容创作到实机验证的完整工作链路,Game Card Editor 定义卡牌与战斗内容,FlowGraph Editor 把玩法规则编排为 Behavior,Play Mode 执行战斗,Game Card Monitor 再把状态与执行记录带回创作环节,这四个环节围绕同一份内容和同一套运行时工作,因此,一项机制可以从资产定义追踪到实机结果,再依据证据继续调整
项目需要自定义 HUD、地图、任务或存档时,GCSApi 与 Events 会把这些系统接入同一场战斗,自定义节点、端口和内容注册表也沿用现有 FlowGraph 与创作界面,不需要另建一套平行的战斗逻辑
从场景初始化进入完整工作链路
GCS 的实际入口是一套可运行的场景骨架,Manager、Bootstrap 与内容数据库就绪后,内容定义和 Behavior 才会进入 Battle Runtime,运行结果则由 Monitor、API 与事件继续交给创作工具和项目系统
上图把场景初始化、内容创作、行为编排、战斗运行、问题诊断和代码接入连成一条可反复迭代的流程,编辑器建立内容与规则,运行时产生结果,Monitor 提供证据,API 与事件则把同一场战斗连接到项目中的其他系统,这套关系决定了 GCS 的主要能力与使用方式
| 能力范围 | 核心规模 | 对项目的直接价值 |
|---|---|---|
| 可视化内容创作 | 6 种编辑模式 | 在同一窗口创建卡牌、卡组、玩家、敌人、状态与遭遇战 |
| 可视化玩法编排 | 147 个可用节点、103 组机制配方 | 用节点组合表达卡牌、状态与敌人行为 |
| 运行时与代码接入 | 147 个 GCSApi 公开成员、43 个内置事件 | 读取、控制和扩展战斗,连接项目流程与自定义 UI |
| Play Mode 诊断 | 7 个 Monitor 标签页 | 核对实时状态、等待来源、Flow 执行摘要与事件历史 |
| 随包成品 | 12 场战斗、80 张卡牌、16 个敌人、30 个状态 | 直接运行成品,再回到正式资产检查配置 |
从场景骨架开始建立战斗内容
打开 Game Card System 并点击 Initialize System,GCS 会创建或复用 GameCardManager 与 GameCardEncounterBootstrap,补齐战场、手牌、HUD 和表现对象,并注册六类预设数据库,完成后即可创作内容或启动固定 Encounter

面板中的 Manager、六类数据库与 Bootstrap 全部就绪后,场景已经具备战斗入口,完整对象职责见战斗场景,固定入口与动态入口的区别见战斗启动

Game Card Editor 的 List、Inspector 与 Preview 围绕当前内容同步更新,List 管理数据库和条目,Inspector 编辑定义及其 Behavior,Preview 检查外观、内容构成、行为摘要和直接引用,另外,六种模式共用搜索、筛选、排序、Undo/Redo、Validation 与 Used By,完成一种内容后可以沿引用关系继续创建下一种内容
| 内容 | 主要定义 | 在战斗中的职责 |
|---|---|---|
| 卡牌 | 名称、描述、费用、类型、Target、关键词、美术与 Behavior | 玩家行动、卡牌生命周期与结算规则 |
| 卡组 | 卡牌条目与份数 | Starting Deck、Reward Deck 与 Master Deck 的内容来源 |
| 玩家角色 | HP、能量、初始卡组、Prefab 与资源显示 | 玩家单位、起始资源与角色表现 |
| 敌人 | HP 范围、Tier、Prefab、Intent 与 Behavior | 预告并执行敌人行动 |
| 状态 | Buff/Debuff、叠加、上限、衰减、图标与 Behavior | 持续效果、规则修改、计数与回合响应 |
| 遭遇战 | 玩家、敌人阵容、奖励卡组与 Battle Rules | 把已有内容装配成可以启动和结算的战斗 |
卡牌是主要创作对象,预设内容包含 80 张卡牌,覆盖 5 个大类和 4 个稀有度,展示攻击、技能、爆发、支援、诅咒、费用变化、多段攻击、状态施加、卡牌生成和牌堆操作等机制

左侧的玩家单位定义玩家控制的角色:HP、能量显示、初始卡组、职业标签、prefab 和预览美术,Demo 包含战士、法师、猎人、牧师四条职业线

右侧的敌人单位则定义了AI控制的角色,随包 16 个敌人覆盖普通、精英、Boss 和召唤物,由意图行为流图驱动,而不是通过硬编码 AI 来实现逻辑选择

状态用于表达增益、减益、计数器和规则修改,随包 30 种状态覆盖持续伤害、护盾、力量/敏捷式数值变化、控制状态、反伤、再生,以及 hook 驱动的规则修改

这六类内容以 ScriptableObject 子资产的形式保存在对应数据库中,进入战斗后,GCS 会据此创建彼此独立的卡牌、单位、状态和牌堆实例,HP、费用与状态层数等运行数据只在实例中变化,不会写回原始资产,内容如何组织和启用见数据库管理,静态定义与运行实例的边界见定义与运行实例
Game Card Editor 定义战斗中有哪些对象及其引用关系,Card、Status 与 Enemy 的实际行为则交给 FlowGraph Behavior
用 147 个节点组合玩法行为
Card、Status 与 Enemy 分别拥有自己的 Behavior,同时共用节点、端口和执行上下文,Entry 决定何时启动,控制线组织顺序和分支,数据线传递单位、卡牌、集合与计算结果,固定字段不足以表达动态规则时,可以将字段切换为端口并接收上游数据

上图把三类 Behavior 与 Group 放在同一套画布体系中,卡牌从出牌或生命周期入口开始结算,状态在战斗时机与 Hook 中响应,敌人通过 Intent Pattern 选择行动,Group 则整理复杂局部连线而不改变执行关系,147 个可用节点由 145 个核心节点与 2 个 Demo FX 扩展节点组成
| 节点家族 | 数量 | 主要职责 |
|---|---|---|
| Entry | 33 | 在战斗、回合、卡牌、单位、状态、能量或事件时机启动 Behavior |
| Hook | 18 | 在伤害、护甲、治疗、能量、抽牌、费用等结果提交前修改或取消 |
| Action | 27 | 修改 HP、护甲、能量、卡牌、状态、变量、回合和单位 |
| Operator | 22 | 比较、计算、筛选、排序、选取、合并和转换数据 |
| Get | 19 | 读取单位、卡牌、牌堆、状态、变量与事件参数 |
| Flow | 10 | 组织分支、循环、序列、Choice、Switch、Wait 与 Gate |
| FX | 7 + 2 Demo | 请求 VFX、SFX、动画、飘字、位移、闪烁与镜头反馈 |
| Intent | 6 | 构建敌人意图叶节点、序列、随机与生命阈值模式 |
| Event | 2 | 发送 GCS 内部事件或可选 GES 事件 |
| Group | 1 | 整理复杂画布,不改变内部真实执行关系 |
流图基础解释控制流、数据流、上下文和求值,节点总览提供全部家族入口,另外,三个配方库已经把常见机制整理为 103 组可编辑 FlowGraph
| 机制范围 | 配方入口 |
|---|---|
| 多段攻击、X 费、抽弃牌、发现、重放、变形、费用和卡牌生命周期 | 52 个卡牌配方 |
| 毒、灼烧、力量、易伤、荆棘、壁垒、沉默、复活、装备和全局规则 | 30 个状态配方 |
| 意图序列、加权随机、Boss 阶段、召唤、分裂、逃跑、牌堆干扰和跨系统事件 | 21 个敌人配方 |
这些配方只使用正式节点与运行时,复制后可以继续修改端口、字段和目标来源,Behavior 完成后便会在 Play Mode 中产生费用变化、目标选择、伤害、状态、牌堆移动和表现请求
在 Play Mode 中执行并验证规则
玩家打出卡牌时,GCS 会检查当前 Phase、手牌归属、有效费用、目标、关键词与 Hook,操作成立后执行 Card Behavior,再通过 Controller 更新伤害、护甲、状态与牌堆,卡牌随后进入 Discard 或 Exhaust,需要玩家选择或等待特定流程时,Behavior 可以显式使用 Choice、Wait 或 Gate,普通 VFX、SFX 和动画请求不会自动阻塞阶段

画面中的玩家与敌人 HP、手牌费用、能量、牌堆数量、敌人意图和当前回合都来自同一份战斗状态,Encounter 决定初始阵容与规则,Behavior 负责结算,战斗状态机持续推进回合、敌人行动、Choice、Reward 与胜负判定
| 运行范围 | 负责的结果 | 深入阅读 |
|---|---|---|
| 战斗生命周期 | 初始化、玩家回合、敌人阶段、胜利、失败、Choice 与 Reward | 战斗流程、战斗生命周期 |
| 卡牌与牌堆 | Draw、Hand、Discard、Exhaust 与跨战斗 Master Deck | 卡牌与牌堆生命周期 |
| 目标选择 | Self、Opponent、All、Selector、随机目标和玩家选择 | 目标选择 |
| 状态与 Hook | 叠加、衰减、来源、Behavior 与提交前修改 | 状态生命周期 |
| 表现与等待 | UI、VFX、音频、动画、Wait、Gate 与 Choice | 自定义 UI 接入、FX 节点与流程节点 |
| 场景与启动 | Manager、Bootstrap、Battle Board、Hand、HUD 与 Presentation | 战斗场景、战斗启动 |
这些系统共同维护最终战斗结果,画面无法解释结果来源时,Game Card Monitor 会把实时状态与执行过程放到同一个诊断窗口中
用 Game Card Monitor 核对结果

上图中的七个标签页分别提供结果证据和过程证据,Battle、Pile 与 Unit 用于确认当前战斗、牌堆和单位状态,Phase、Gate、Flow 与 Event 则用于判断流程停在何处、哪些节点已经访问,以及对应事件是否触发
| 标签页 | 可以检查的内容 |
|---|---|
| Battle | Encounter、Phase、Turn、玩家、敌人、Pending Intent 与等待状态 |
| Pile | Hand、Draw、Discard、Exhaust 与 Master Deck |
| Unit | HP、护甲、能量、状态层数、存活状态和 Pattern Walk |
| Phase | 阶段转换历史与 Choice Pending |
| Gate | Holder、Active Reasons 与 Acquire/Release 记录 |
| Flow | Behavior Owner、Trigger、访问节点数与同步执行耗时 |
| Event | 事件时间线、Payload 摘要与订阅者数量 |
Game Card Monitor说明全部字段和检查顺序,问题索引从启动、出牌、状态、事件与表现异常进入对应修复路径,Monitor 确认战斗实际发生了什么,GCSApi 则让项目代码读取这些结果并提交下一项操作
通过 GCSApi 接入项目并继续扩展
GCSApi 是项目代码访问战斗的统一入口,HUD、地图、任务、存档和开发工具可以用它启动战斗、提交玩家操作、读取状态、安全修改战斗并订阅事件,项目代码与可视化内容始终驱动同一份战斗状态
最小调用只负责选择 Encounter 和提交玩家意图,具体战斗规则仍然来自内容资产与 Behavior
using TinyGiants.GCS.Runtime;
GCSApi.StartBattle(encounter);
bool played = GCSApi.TryPlayCard(card, target);
GCSApi.EndPlayerTurn();
GCSApi 使用指南按接入顺序给出完整示例,API 参考列出全部公开成员,事件使用指南与事件参考说明 43 个内置事件的订阅方式和精确时机
项目需要专属机制时,扩展仍然使用同一套 FlowGraph 与运行时契约
| 扩展点 | 适用场景 | 文档 |
|---|---|---|
| 自定义节点 | 增加玩法动作、数据来源、选择器、运算或表现请求 | 自定义节点 |
| 自定义端口 | 推断字段输入,声明结果输出、选项与控制分支 | 自定义端口 |
| 执行上下文 | 读取输入和目标,通过 Controller 修改状态并发布结果 | 执行上下文 |
| 类型、标签与描述 Token | 增加项目分类、筛选维度与动态卡牌文本 | 扩展卡牌类型、标签与描述 Token |
| 可复制样例 | 从七类家族模板和七个对应成品节点开始扩展 | 自定义节点 |
四个注册表会自动发现符合契约的节点、卡牌类型、标签与描述 Token,不需要维护手工注册清单,另外,项目同时使用 GameEventSystem 时,可以通过GES 集成在 FlowGraph 与外部事件系统之间建立双向通道
随包 Demo 提供可以拆解的完整成品
随包 Demo 把创作工具、FlowGraph、运行时、表现接口和扩展方式组合成可以直接运行的成品,Warrior、Mage、Hunter 与 Priest 四条职业线各有 Normal、Elite、Boss 三场战斗,12 个场景全部使用正式工具链构建,也能回到对应数据库、内容资产和 Behavior 检查配置
| Demo 内容 | 数量 | 组成 |
|---|---|---|
| 可运行场景 | 12 | 四职业 × Normal、Elite、Boss |
| 遭遇战 | 12 | 每个场景对应一份 Encounter |
| 玩家角色 | 12 | 四职业 × Novice、Veteran、Master |
| 敌人 | 16 | 四职业 × Normal、Elite、Boss、Summon |
| 卡牌 | 80 | 6 Basic、20 Support、40 Skill、12 Burst、2 Curse |
| 卡组 | 16 | 12 套职业起始卡组、4 套奖励卡组 |
| 状态 | 30 | 15 Buff、15 Debuff |
Demo 总览说明数据库与内容规模,Demo 战斗场景展示全部阵容和实机画面,Demo 内容参考与资源布局则把场景结果连接回内容资产及其文件归属
这些成品同时提供工程质量证据,说明同一套工具链已经覆盖多职业构筑、普通战、精英战、Boss 阶段、召唤、复杂状态和战后奖励
面向正式项目的工程边界
| 工程维度 | 已提供的基础 |
|---|---|
| Unity 与渲染管线 | 支持 Unity 2021.3 及以上版本,推荐 Unity 6,Demo 支持 Built-in Render Pipeline 与 URP |
| 运行依赖 | GCS 运行时零第三方依赖,过渡与程序动画使用 TinyGiants 自有 TGTween |
| 内容稳定性 | ScriptableObject 子资产保存定义,Unity 引用连接内容,Active Database 控制主动发现范围,GUID 支持内容查找 |
| 创作保护 | Game Card Editor 提供 Undo/Redo、Validation、Used By 与跨数据库复制;FlowGraph Editor 检查节点身份、Host 与端口结构 |
| 运行一致性 | Controller 统一提交修改,Hook 在提交前修改或取消,事件广播变化,显式 Gate 等待表现完成 |
| 诊断能力 | Monitor 显示 Battle、Pile、Unit 快照,并记录 Phase、Gate、Flow 与 Event 历史 |
安装与初始化给出支持版本、导入结果和首场景检查,项目结构说明包内容与项目数据的边界,确认这两项后即可按当前目标进入教程、创作指南、参考手册或故障排查
选择下一步
评估 GCS 时先运行第一场战斗或 Demo 场景,准备接入项目时进入第二场战斗、内容创作或代码集成,其余主题按当前任务选择
| 当前目标 | 推荐入口 |
|---|---|
| 体验一场完整战斗 | 第一场战斗 |
| 从空场景创建自定义战斗 | 第二场战斗 |
| 理解内容、Behavior 与运行机制 | 数据库管理、流图基础、战斗流程、运行时概览 |
| 创建卡牌与战斗内容 | 卡牌、卡组、玩家角色、敌人、状态、遭遇战 |
| 查找节点或现成机制 | 节点总览、卡牌配方、状态配方、敌人配方 |
| 接入 UI 与项目代码 | GCSApi 使用指南、自定义 UI 接入、事件使用指南 |
| 扩展节点与内容类型 | 自定义节点、自定义端口、执行上下文 |
| 排查创作或运行问题 | 问题索引、内容创作问题、运行时问题 |