FlowGraph 窗口
GCS 里的每个卡牌效果、状态触发和敌人回合都是一张节点图。这个窗口就是搭建它们的地方。
面向用可视化方式连接行为的内容作者。大多数卡牌、状态和敌人行为都可以直接用图完成。FlowGraph 窗口编辑的是卡牌、状态或敌人内嵌的 Behavior 图。它没有菜单入口:在 Game Card Editor 里选中资产,点 Inspector 里的 Edit FlowGraph。窗口页眉会明确告诉你正在编辑什么,格式为 <Asset Name> / FlowGraph
下面是 demo 卡牌 Poison Arrow。它的整个设计从左往右读:On Card Played 入口,一个对准对手、数值为 3 的 Deal Damage 节点,一个播放箭矢命中 VFX、带浮动文字和相机震动的 Play Effect 组,一个叠加 2 层 Poison 的 Change Status 节点,最后再接一个播放毒雾的 Play Effect 组

谁拥有图
图是一个存储在拥有者资产内部的 GameEffectFlowGraph。没有单独的图资产需要管理,也不会丢
| Owner | 常见图 |
|---|---|
| Card | 打出行为、目标结算、卡牌专属表现 |
| Status | 应用行为、触发器、Hook、层数反应、衰减行为 |
| Enemy | 意图选择、意图预览数据、敌人回合行动 |
状态图和卡牌图在结构上一模一样,区别只在入口。以 Poison 为例,它响应的是回合时机而不是出牌:

图跟着拥有它的资产一起保存。如果运行时行为没有变化,先确认战斗场景使用的是刚编辑的那条数据库条目。另一个数据库里的重复条目是最常见原因
认识窗口
工具栏从左到右分四组:
| 分组 | 按钮 |
|---|---|
| 导航 | Select 工具、Pan 工具、Frame All、Frame Selection、Select All、网格开关 |
| 节点 | Create Node、Delete、Copy、Paste |
| Group | 创建、解包、连节点一起删除、进入、退出、重命名 |
| 视图 | 缩小、缩放百分比(双击可输入 25 到 200 的精确值)、放大、Undo、Redo |

页眉还有两个控件。validation 发现问题时会出现 ⚠ Issues 徽标:点它列出问题,点某条问题跳到出错的节点。? 按钮打开快捷键总览,窗口里的每个手势都记录在那里
右侧边缘有节点参考抽屉。按 Tab 或点 ‹ 手柄展开,然后选中任意节点,即可查看它的端口和字段说明。在参考面板里悬停某个端口,画布上对应的端口会同步高亮
| 目标 | 按键 |
|---|---|
| 取景整张图 | Space |
| 取景当前选区 | Ctrl+F |
| 全选节点 | Ctrl+A |
| 复制、粘贴、剪切 | Ctrl+C、Ctrl+V、Ctrl+X |
| 把两个以上节点打包成 Group | Ctrl+G |
| 进入或退出 Group | Ctrl+→、Ctrl+← |
| 删除 Group 但保留节点 | 选中 Group 按 Delete |
| 连节点一起删除 Group | Shift+Delete |
| 开关参考抽屉 | Tab |
| 打开快捷键总览 | ? |
| 撤销、重做 | Ctrl+Z、Ctrl+Y |
所有 Ctrl 换成 Cmd 即可
拖动节点时会自动对齐吸附到邻近节点。这些导航工具不改变战斗逻辑;它们用于保持大图的可读性和可维护性
Add Node 菜单分组
打开节点菜单有三种手势:双击空白画布弹出搜索框,右键选 Create Node 打开分类菜单,或者用工具栏按钮。GCS 内置 140+ 节点,分为九个组。按你想做出的创作结果搜索,不要按 C# 类型名搜索:
| Group | 什么时候用 |
|---|---|
Entry | 从战斗、回合、卡牌、状态、伤害、能量、事件或单位时机启动图 |
Hook | 在 GCS 提交某个数值之前修改或取消它 |
Action | 改变战斗状态:伤害、HP、护甲、能量、卡牌、状态、回合、变量、单位 |
Get | 读取战斗状态:当前单位、目标单位、卡牌信息、牌堆、事件参数、变量 |
Operator | 比较、计算、过滤、排序、选取、转换、随机化或合并值 |
Flow | 组织执行顺序:Sequence、Branch、Switch、Gate、Loop、While、Foreach、Wait、Choice、Delayed Trigger |
FX | 请求 VFX、SFX、动画、浮动文字、相机震动、单位滑动或闪烁反馈 |
Intent | 构建敌人的预览意图和行为模式 |
Event | 触发(Raise)GCS 内部事件或可选的 GES 事件 |
Group 不在此菜单中。选中两个或多个节点并按 Ctrl+G,即可把它们打包成一个可折叠的 Group 节点。
本文档全程使用 Add Node 菜单里的名字。MutatorNode、SourceNode 这类扩展基类只在你编写自定义节点时才重要
画布工作流
| 操作 | 怎么做 |
|---|---|
| 添加节点 | 双击空白画布,搜索,放置 |
| 连接控制端口 | 从输出端口拖到输入端口,决定执行顺序 |
| 连接数据端口 | 同样的拖法;用来在节点之间传递值、目标、卡牌、状态或集合 |
| 把输入提升为端口 | 点字段旁边的插槽,然后把另一个节点接进来 |
| 重命名节点 | 双击标题。点标题旁的箭头可以折叠 |
| 移动和分组节点 | 直接拖,节点会自动对齐;Ctrl+G 把选区打包成 Group |
把布局当作图的说明文档。入口放左边,主要玩法动作放中间,表现放右边,除非某个视觉确实必须发生在机制结算之前
循环和集合遵循同样的从左到右阅读顺序。Rapid Fire 射击四次,每次随机挑一个敌人:On Card Played 入口接一个设为 4 的 Loop,循环体里 Random Elements 从 All Enemies 中抽一个目标,交给造成 3 点伤害的 Deal Damage

字段、端口和结果
大多数节点同时有固定字段和可选输入端口。当一个值本身就是卡牌设计的一部分("造成 8 点伤害""抽 2 张牌"),留在字段里。当它应该由另一个节点决定("造成等同护甲的伤害""按目标身上的状态数抽牌"),再提升成端口
结果端口的意义在于:最终结果可能和配置值不同。浮动文字应该读取 Deal Damage 的 Dealt 输出,而不是配置的伤害值,因为护甲、Hook 和状态规则都会影响最终数字
敌人意图图
敌人图多出 Intent 组:Sequence Pattern、HP Threshold Pattern、Weighted Random Pattern、Once Per Battle、Every N Turns 这些模式节点决定敌人预告哪个 Leaf Intent,每个 Leaf 挂着敌人回合实际执行的行为体。Mire Reaper 这个 Boss 展示了完整体量下的形态:

Validation 反馈
页眉的 ⚠ Issues 徽标在每次编辑后重新统计。它针对的都是创作错误:
- 拥有者跑不了的节点,比如把只属于卡牌的节点放进状态图
- 内部事件入口没填事件名,或 GES 事件入口没指定事件
- 连接指向已经不存在的节点或端口
- 两个不兼容端口之间的连接
- 自定义值节点没有声明任何输出端口,谁也读不到它
点徽标,再点某条问题,视图会聚焦到对应节点
带问题的图也许仍能运行,但缺失端口的连线可能导致卡牌效果不完整且没有明显报错。先清空问题列表,再调整数值和表现
保存与测试
编辑图之后:
- 编辑时 Unity 会把拥有图的资产标记为 dirty,关闭窗口时自动保存。中途也可以使用
Ctrl+S主动保存 - 运行能触发这张图的最小战斗
- 根据图应该改变的内容,把 Game Card Monitor 停在
Flow、Unit、Pile或Event标签上 - 先确认运行时状态改对了,再评判表现效果
经得起维护的图形状
| 设计目标 | 清晰形状 |
|---|---|
| 一张卡造成伤害并显示数字 | 目标来源 → Deal Damage → 从 Dealt 取值的浮动文字 |
| 一张卡影响所有敌人 | All Enemies → 集合动作;每个目标需要独立表现时用 Foreach |
| 一个状态改变受到的伤害 | Hook 入口 → Operator 节点 → Write Hook |
| 一个敌人按固定套路行动 | Intent 模式 → Leaf Intent 节点 → 行为体 |
| 一个少见分支取决于当前状态 | Get 节点 → Condition → Branch 或 Gate |
图名、Group 名和标签按玩家能看到的效果命名。"Burn burst on turn start" 比 "status handler branch 2" 更容易维护