流图基础
把 Behavior 读成一条玩法规则:在指定时机,使用当前目标和数值,按连线顺序执行动作
以Poison Arrow 为例, 它的 Behavior 从 On Card Played 开始,先造成伤害,再使用实际结算结果播放表现,最后施加 Poison

上图把一次出牌拆成了执行顺序与数据关系:
- 流程连线决定节点先后
- 数据连线把目标和实际伤害交给需要它们的节点
读懂这两类连线后,便能沿着画布判断卡牌最终产生什么结果
Behavior 属于内容资产
FlowGraph 直接保存在 Card、Status 或 Enemy 中,不需要另外创建图资产,打开某项内容的 Edit FlowGraph,编辑的就是该资产自己的 Behavior
| 所有者 | Behavior 表达的规则 | 常见起点 |
|---|---|---|
| Card | 卡牌在打出、抽取、弃置等时机发生什么 | On Card Played 与其他 Card Entry |
| Status | 状态如何响应战斗时机、修改数值或处理层数 | Battle/Status Entry 与 Hook |
| Enemy | 敌人如何选择 Intent,以及该 Intent 执行什么 | On Enemy Behavior Start 与 Intent Pattern |
复制内容资产时,Behavior 会随资产一起复制,因此在修改副本时,不会对原资产流图产生任何印象
从正确的触发时机开始
Behavior 归属于具体内容后,每条可执行路径还需要从与规则相匹配的入口开始
| 起点 | 适用规则 | 示例 |
|---|---|---|
| Entry | 在战斗或内容生命周期到达时执行动作 | 出牌后造成伤害、回合开始时触发状态 |
| Hook | 在 GCS 提交数值前修改或取消结果 | 增加伤害、改写抽牌数、拒绝出牌 |
| Intent Pattern | 选择并公布敌人的下一次行动 | 从 Sequence 或 Weighted Pattern 中选出 Leaf Intent |
触发时机属于规则本身,“回合结束时”生效的状态应连接对应的回合结束 Entry,不能用时间接近的其他入口替代,精确时机见 Entry 节点、Hook 节点和战斗生命周期
控制流决定顺序,数据流提供参数
| 连线 | 回答的问题 | 常见端口 |
|---|---|---|
| 控制流 | 下一个执行哪个节点 | Out / In、True / False、Body / Done、命名 Case |
| 数据流 | 当前节点使用哪个目标、集合或数值 | Source/Result Output 连接到 Consumer Input |
一个 Action 只有在控制流到达时才会执行,数据节点不需要接入控制流,它们会在下游节点需要输入时提供当前值
固定字段与输入端口
支持动态输入的字段可以在固定值与输入端口之间切换
端口已连接 -> 使用连线提供的当前值
端口未连接 -> 使用节点字段中保存的值
固定费用、伤害或持续时间适合直接填写字段,需要读取当前护甲、已损失 HP、状态层数或 Hook 输入时,再切换为端口,具体操作见流图编辑器
数据在需要时求值
数据不会预先沿整张图广播,Action 开始执行时,才会从连接的 Source、Get、Operator 或 Selector 读取当前值
上图说明数据连线读取的是节点执行当下的战斗状态,先造成伤害再读取 HP,得到的便是伤害后的数值
需要让多个后续节点共享同一快照时,应先把结果保存到 Graph Variable 或 Battle Variable
上下文决定 Self、Opponent 与当前卡牌
同一个节点能够用于 Card、Status 和 Enemy,是因为 Behavior 执行时会带入当前宿主、行动者、目标和战斗状态
| 需要的数据 | 常见来源 |
|---|---|
| 当前卡牌 | This Card 或 Entry Output |
| 当前行动者或状态持有者 | Self、Active Unit 或 Entry Output |
| 玩家选择或规则计算的目标 | Card Selection、Source 字段或已连接 Selector |
| HP、护甲、能量、牌堆和状态层数 | 对应的 Get 节点 |
| 伤害、治疗、移动和状态修改 | Action 节点的实际 Result Output |
| Hook 或事件参数 | 匹配入口提供的 Output |
Self 的实际对象随宿主变化:玩家卡牌中通常是玩家,Status 中是状态持有者,Enemy Behavior 中是当前敌人,目标来源与端口优先级见目标选择
选择合适的数据范围
| 传递方式 | 适用范围 |
|---|---|
| 直接连线 | 一个下游节点立即使用当前值 |
| Action Result | 后续逻辑或表现需要使用实际生效的伤害、治疗、移动或层数变化 |
| Graph Variable | 同一次 Behavior 执行中的多条路径共享快照 |
| Battle Variable | 数值需要跨 Entry、卡牌或回合保留 |
| Internal Event | 不同内容资产需要在没有直接连线时交换数据 |
表现层应优先使用 Dealt、Changed、Drawn、Added 等实际结果,而不是原始输入,护甲、Hook、上限和目标校验都可能改变最终数值,沿用 Result 才能让飘字、音效和血条变化与结算保持一致
内容字段与 Behavior 各自负责什么
| 保存在内容资产中 | 放入 Behavior 中 |
|---|---|
| 名称、描述、费用、类型、稀有度、标签、美术、Card Target、叠层规则、单位属性与 Battle Rules | 伤害、治疗、护甲、牌堆移动、状态反应、Hook、敌人行动、Choice、Wait、Event 与表现请求 |
先用内容字段定义玩家能够识别的对象和稳定规则,再用 Behavior 表达执行顺序与动态结果,打开流图编辑器可以完成实际连线,节点参考提供精确端口和参数,已验证的组合则集中在卡牌配方、状态配方和敌人配方