FlowGraph 编辑器工作流
FlowGraph 窗口的日常循环:从所属资产打开图,先连控制线再连数据线,并通过 Issues 徽标尽早发现结构问题。
面向在 Workbench 中已建好卡牌、状态或敌人,接下来要编辑其行为的所有人。FlowGraph 窗口用于编辑具体行为。先在 Workbench(工作台)里创建卡牌、状态或敌人;图的编辑在那之后,从该资产的 inspector 进入。

这是 demo 的 Rapid Fire。On Card Played 入口启动一个 Count = 4 的 Loop;每一轮运行 Amount = 3 的 Deal Damage,目标每次都从 All Enemies 传入 Random Elements 后重新选取。卡面写的是 "Deal 3 damage to a random enemy 4 times",图结构与这句效果文本一致。
从 Workbench 打开图
在 Workbench 中选中卡牌、状态或敌人,点击其 inspector 里的 Edit FlowGraph 按钮。窗口会打开该资产内嵌的 Behavior 图,页眉显示 <Asset Name> / FlowGraph,你随时都知道正在编辑谁的行为。

从所属资产打开很重要,因为宿主决定 Add Node 菜单提供什么。卡牌图和状态图都能用 Deal Damage,但只有卡牌图有 On Card Played 和 This Card,只有敌人图有 Intent 模式节点。不存在"凭空"打开一张图的方式;每张图都属于某个资产。
工具栏覆盖了图的日常操作:选择与平移工具、全图取景或选区取景、全选、网格开关、节点的创建/删除/复制/粘贴、Group 工具、缩放控制,以及撤销/重做。编辑完按 Esc 关窗。

添加节点
打开 Add Node 菜单有三条路:
| 操作 | 位置 |
|---|---|
| 双击 | 画布任意空白处;节点落在点击的位置 |
| 右键,选 Create Node | 画布空白处 |
| 工具栏的 Create Node 按钮 | 任何时候 |
菜单是一个可搜索的下拉列表,按固定顺序分组:Entry、Hook、Flow、Intent、Action、Get、Operator、FX、Event。输入关键词可以缩小结果范围,例如 dam 会列出 Deal Damage 和几个伤害 Hook。
列表按图的宿主过滤。卡牌图能看到卡牌入口和 This Card;只有敌人图列出 Intent 节点;Hook 出现在卡牌图和状态图里。想用的节点不在列表里,通常说明当前宿主不支持该节点。完整的可用性对照见入口与 Hook。
构建一张图
- 为你关心的时机添加一个入口节点
- 从 Add Node 菜单添加行为所需的 Action、Flow 和 Get 节点
- 从左到右连接控制端口,直到图有完整的执行路径
- 只在节点必须读取另一个节点的值时,才连接数据端口
- 填写没有数据线驱动的其余字段
- 继续之前检查 Issues 徽标
一张完成的图通常应该能读成一句话:这个时机发生时,选中这些目标,施加这个变化,然后展示这个反馈。如果无法概括出这条主路径,通常说明控制路径有缺口,或者入口选错了。
阅读节点卡片
| 区域 | 含义 |
|---|---|
| Header | 节点在 Add Node 菜单中的名字 |
| Fields | 可编辑设置:数值、目标来源、牌堆、时长、clip、条件运算符 |
| 左侧端口 | 输入。控制输入启动节点;数据输入从其他节点读值 |
| 右侧端口 | 输出。控制输出继续执行;数据输出供后续节点使用 |
| 插槽按钮 | 值字段行末的 ○ / ◉ 开关,决定该字段是内联值还是输入端口 |
大多数值字段默认不显示端口。能被连线驱动的字段,行末带一个小插槽按钮:○ 表示字段当前是你直接填写的内联值;点一下,字段就变成节点左侧的一个输入端口,按钮变成 ◉,这一行改为只读地显示当前驱动它的值。再点 ◉ 切回去:端口消失,接进来的线也一并移除。从不暴露的字段让节点保持紧凑。

暴露的端口接上线后,运行时以连接值为准,字段退化为日后删线时的 fallback。固定值能够表达清楚时,不需要暴露端口。
先连控制线
控制线描述顺序。先让图形成正确的执行路径,再考虑数据连线。推荐顺序:
- 入口
- 目标选择
- 改变状态的 Action
- 需要时加分支或循环
- 表现反馈
- 事件或收尾
除非反馈本身就是起手动作,否则表现通常放在状态变化之后。Play VFX 如果放在可能失败的 Deal Damage 前面(没有目标、数值为零),画面会显示命中反馈,但战斗状态没有变化。

demo 的 Poison Arrow 就是这个顺序:On Card Played、造成 3 点伤害的 Deal Damage、施加 2 层 Poison 的 Change Status,镜头震动、飘字和弹道特效都分组排在它们要宣告的状态变化之后。
连线的基本规则:
| 规则 | 拖线时意味着什么 |
|---|---|
| 从任意端口拖出,落到另一侧的端口上 | 输出连输入,拖动预览跟着光标走 |
| 一个控制输出只接一个后继节点 | 需要多条去路的节点自带命名输出(True/False、Body/Done、Step0……) |
| 一个控制输入可以接多根来线 | 多条路径可以汇聚到同一个动作 |
| 数据输出随便分叉;数据输入只收一根线 | 一个 Unit Info 到处复用;每个消费端口只认一个来源 |
| 类型不合的数据线会被标记,不会直接丢弃 | 线渲染成断裂样式,中点有警告图标;悬停能看到原因,比如文本输出接进了数字输入,Issues 徽标也会计数 |
| 在已连接的输入端口上按住拖动,把线重新拖出 | 可以重新选择连接目标 |
数据线用于动态值
值是动态的时候,才需要使用数据线:
| 需要什么 | 从哪里连 |
|---|---|
| 当前 HP 或护甲 | Unit Info |
| 实际落地的伤害 | Deal Damage 的 Dealt 输出 |
| 一张卡的费用或类型 | Card Info |
| 当前能量 | Player Energy |
| Hook 正在裁决的值 | Hook 入口的 Value 输出 |
| 选择器找到了几个 | Count |
固定值优先用字段。Amount = 8 的 Deal Damage 比接一个 Constant 进 Amount 更清楚;只有当数值需要计算或复用时才连线。
重排、重命名、参考抽屉
三个小工具可以改善日常编辑效率:
| 工具 | 怎么用 |
|---|---|
| 重排端口 | 上下拖动端口的标签,其余端口自动让位,新顺序随节点保存。最常连线的端口可以放在更容易操作的位置 |
| 重命名端口 | 双击端口标签直接输入。自定义名只是这个节点的显示标签,连线和行为都不变。In 和 Out 不可改名 |
| 参考抽屉 | 按 Tab(或右侧的抽屉把手)。选中任意节点即可查看它的用途、运行时机、端口和参数,不需要离开窗口 |
快捷键
| 快捷键 | 动作 |
|---|---|
| 双击画布 | 在光标处打开 Add Node 菜单 |
Ctrl+A | 全选节点 |
Ctrl+F | 取景到选区;没有选区时取景全图 |
Space | 取景全部节点 |
Ctrl+C / Ctrl+V | 复制 / 粘贴选中的节点 |
Ctrl+G | 把选中的节点打成 Group |
Ctrl+→ / Ctrl+← | 进入选中的 Group / 退回上一层 |
Delete | 删除选区;选中的是 Group 时解包它并保留内部节点 |
Shift+Delete | 连同内部节点一起删除 Group |
Ctrl+Z / Ctrl+Y | 撤销 / 重做 |
Tab | 开关参考抽屉 |
Esc | 先关帮助浮层,再关窗口 |
检查 Issues 徽标
图有问题时,窗口会显示 ⚠ N Issues 徽标。点击查看列表,每条问题都能跳转到对应节点。校验器能抓到的问题包括:
| 问题 | 含义 |
|---|---|
| Node is not allowed for this FlowGraph host | 节点放在了不支持它的宿主图里,比如 Intent 节点出现在敌人图之外 |
| Internal event entry requires an event name | On Internal Event 入口的 EventName 为空 |
| GES event entry requires a GES event | On GES Event 入口没有指定事件资产 |
| Type mismatch | 数据线两端的值类型对不上,比如文本接进了数字 |
| Connection references a missing node or port | 连线指向了已被删除或改名的节点或端口 |
同一套检查也在 Workbench 的校验流程里运行,所以存在问题的行为图会同时显示在资产本身上。
图在运行时表现异常但校验没有报错时,可以先缩小到验证时机的最小路径:入口直连 Show Floating Text。确认浮动文字出现在正确时机后,再逐段接回实际行为。
让图保持可读
布局也是文档。它应该让下一位打开这张图的人快速理解主路径、数据来源和反馈位置。
| 习惯 | 为什么有用 |
|---|---|
| 主控制路径保持水平 | 从入口到结果更容易扫读 |
| 数据来源放在读取它的节点上方 | 连线短,也很少交叉 |
| 表现放在状态变化之后 | 反馈永远对应真实结果 |
| 只在有线驱动时才把字段暴露成端口 | 节点保持短小,内联值随时可改 |
| 重复逻辑包进 Group 节点 | 大图保持可导航,Group 还能复用 |
| 变量按玩法含义命名 | BonusDamage 比 Value1 更容易维护 |
常见编辑错误
| 错误 | 更好的做法 |
|---|---|
| 一张图里塞多个入口且没有视觉分隔 | 给每个入口留出清楚分隔的区域,或者拆分行为 |
卡牌只打敌人,目标却用 AllUnits | 用 Opponent、AllEnemies,或按队伍 Filter |
只读一次的值也用 Set Variable | 把输出直接连给使用方 |
条件还没搭好就先放 Branch | 先建 Condition,再连进 Branch.Condition |
Hook 图里没有 Write Hook | 补上 Write Hook;如果本来就不改值,换成入口 |