跳到主要内容

流图编辑器

Guide

FlowGraph将触发时机、战斗结算、数据计算与表现请求连接成了一条可以直接阅读和验证的行为链

Card、Status 与 Enemy 的 Behavior 决定了它们在战斗中的触发时机、结算过程与最终反馈,在 Game Card Editor 中选择需要编辑的 Card、Status 或 Enemy,Behavior 区域会显示当前行为摘要,并提供 Edit FlowGraph 入口

FlowGraph 面板

提示

Card 与 Status 的摘要列出根图中的 Entry,Enemy 的摘要则统计 PatternsLeafIntentsActions

Game Card Editor 中当前条目的 Behavior 区域与 Edit FlowGraph 入口

上图中的 OnCardPlayed 是当前 Card 根图中的 Entry,点击 Edit FlowGraph 后,FlowGraph Editor 会打开这张卡牌拥有的行为图

提示

每张行为图都隶属于一个 Card、Status 或 Enemy

一条完整的行为链

打开随包卡牌 Poison Arrow 后,可以在画布中看到它从出牌到结算和表现反馈的完整过程

Poison Arrow 的完整卡牌行为图,从 On Card Played 连接到伤害、表现与状态节点

上图从左侧的 On Card Played 开始,依次连接 Deal DamagePlay EffectChange Status 与第二个 Play Effect,控制线排定实际执行顺序,Deal Damage.Dealt 则把真实伤害交给浮动文字使用,一张行为图由以下四类信息共同构成:

画布元素承担的职责在 Poison Arrow 中的作用
Entry在战斗、回合、卡牌、状态或事件的指定时机启动行为On Card Played 在卡牌成功打出后启动行为
控制连接决定节点先后顺序先造成伤害,再播放反馈并施加状态
数据连接把运行时对象和结果交给下游节点将真实伤害传给浮动文字的 Amount 输入
节点字段保存不会随本次执行改变的创作值伤害量、状态引用与表现类型

这四类信息都在画布上完成连接与配置,页眉和工具栏用于定位资产、整理画布并查看 Issues,右侧参考抽屉则用于解释当前节点的输入、输出与字段

想了解这些画布元素如何进入运行时并完成一轮执行的,详见 FlowGraph 执行模型

从 Entry 接出第一条可执行路径

双击空白画布、右键选择 Create Node,或点击工具栏中的创建按钮,都会打开一个 Add Node 菜单

提示

输入文字时,搜索会按节点显示名称过滤结果,按分类浏览时则可以直接查看当前拥有者可用的节点族

Card Behavior 中按类别展开的 Add Node 菜单

上图显示的是 Card Behavior 的 Add Node 菜单,搜索框下方只保留当前 Card 可以使用的八类节点,Card 与 Status 可以使用 Hook,Enemy 则以 Intent 取代 Hook,三种拥有者可使用的所有内置节点族如下:

节点族在行为图中承担的工作
Entry在战斗、回合、卡牌、状态、伤害、能量、事件或单位相关时机启动行为
Hook在 GCS 提交某项结算前启动 Hook 路径,并输出当前值
Flow使用 Sequence、Branch、Switch、Gate、Loop、While、Foreach、Wait、Choice 与 Delayed Trigger 组织执行路径
Action改变 HP、护甲、能量、卡牌、状态、回合、变量或单位等战斗状态
Get读取当前单位、目标、卡牌信息、牌堆、事件参数或变量
Operator比较、计算、筛选、排序、选择、转换、随机化或合并数据
FX请求 VFX、SFX、动画、浮动文字、相机震动、滑动或闪烁反馈
Intent为 Enemy 选择并预告下一步行动,再执行对应的行为节点链
Event触发 GCS 内部事件或可选的 GES 事件

节点连接规则

  • 除 Enemy 的 On Enemy Behavior Start 之外,普通 Entry 节点与 Hook 路径都可以直接连接真正改变战斗状态的 Action

  • 而Enemy 的 On Enemy Behavior Start ,必须先进入 Pattern 或 Leaf Intent,选定 Leaf Intent 后,再从它的 Out 连接 Action 与 FX

  • 需要动态计算时,在 Action 前接入 Get 与 Operator,需要画面或声音反馈时,再把 FX 接到结算之后

  • Hook 节点只负责在结算提交前启动路径并提供当前值,需要改写或取消结果时,应继续连接 Action 类别中的 Write HookCancel Hook

画布操作

操作结果
从输出端拖到输入端建立控制连接或数据连接
从已连接的输入端开始拖动拿起原有连线并重新连接
单击连线后按 Delete删除当前连接
拖动节点移动节点并显示邻近节点的对齐引导线
双击节点标题修改这个节点在当前图中的显示名称
点击标题旁的折叠箭头折叠或展开节点字段
按住 Shift 单击或拖动空白画布扩展选择或框选多个节点

端口连接规则

  • 控制输出只能连接一个后续步骤,控制输入则可以汇合多条路径
  • 数据输出可以供多个节点读取,数据输入则只接收一个来源
  • 端口类型不兼容时,连线会显示为红色并附带警告,悬停可以查看不兼容原因,普通节点之间的错误连接还会进入右上角显示的 Issues
  • Group 边界连接则需要直接根据画布警告修正

控制路径与数据路径的汇合

下面的Rapid Fire 展示了控制路径与数据路径在同一张图中的配合方式:

  • 一条控制路径从 On Card Played 进入 Loop,每次循环执行 Deal DamagePlay Effect
  • 另一条数据路径则通过 All EnemiesRandom Elements 提供随机目标,伤害节点与浮动文字分别读取这项结果

Rapid Fire 的完整卡牌行为图,包含 Loop、目标选择、伤害与表现节点

提示

上面这幅图中的 Selector 会在每次数据读取时重新求值,因此图中的两条读取可能得到不同目标,如需让伤害与表现严格落在同一单位上,应在循环体内先用 Pick Element 取得单个单位并通过 Set Variable 保存,再让两个下游节点读取同一个 Variable

卡牌常用的出牌、抽牌、弃牌、消耗、选择与延迟触发组合见 卡牌行为配方

在固定字段与输入端口之间切换

节点字段适合保存固定创作值,输入端口适合接收本次执行才确定的动态值,例如下图中的 Deal DamageAmount = 3 保留为固定字段,当伤害需要由护甲、状态层数或其他计算结果决定时,再点击字段右侧的 将它切换为输入端口

Deal Damage 与 Play Effect 节点上的字段和输入端口切换控件

提示

只有支持动态输入的字段才会显示这个控件

节点卡片还支持以下局部整理操作:

操作用途
双击字段标签为字段设置只在当前图中显示的名称
双击普通节点的端口名称修改端口显示标签,固定的 InOut 与 Group 边界端口不会改变
上下拖动普通节点的端口名称在同一侧调整端口顺序,减少数据线交叉
编辑数量字段新增或移除 Branch、Case、Step 等动态端口
读取结果输出将 Action 的真实结算结果继续传给后续节点
提示
  • 输入值与结果值并不总是相同,Deal Damage.Amount 表示本次伤害请求的输入值,Deal Damage.Dealt 则表示经过护甲、状态与 Hook 处理后的真实结算结果
  • 浮动伤害文字或后续判断应读取 Dealt,倘若直接复用 Amount ,则会忽略结算过程中已经发生的变化

此外,流图窗口内还可按 Tab 展开右侧的节点参考抽屉,选中节点后即可查看节点的用途、输入、输出、字段以及相关的执行时机等完整信息:

选中 Deal Damage 后展开的节点参考抽屉

用导航与 Group 整理大型行为图

节点数量增加后,先用聚焦和缩放控制可见范围,再把已经稳定的局部流程收进 Group,让主控制路径继续保持从左到右

FlowGraph Editor 工具栏中的 Navigate、Nodes、Groups 与 View 控件

上图中的工具栏从左到右,依次为选择、平移、聚焦、节点创建、Group、缩放、Undo 与 Redo 控件,常用手势按实际工作分为四组:

工作范围目标手势或按键
导航平移画布中键拖动,或选择 Pan 工具后拖动
导航缩放画布鼠标滚轮、工具栏 +,或双击百分比输入 25–200%
导航聚焦整张图Space
导航聚焦选区,未选择时聚焦整张图Ctrl + F
选择与编辑全选节点Ctrl + A
选择与编辑复制、粘贴、剪切Ctrl + CCtrl + VCtrl + X
选择与编辑删除选中的节点或连线DeleteBackspace
选择与编辑撤销、重做Ctrl + ZCtrl + Y,或 Ctrl + Shift + Z
Group将任意两个以上节点收进 GroupCtrl + G
Group进入或退出选中的 GroupCtrl + Ctrl +
Group解包 Group 并保留内部节点DeleteBackspace
Group连同内部节点删除 GroupShift + DeleteShift + Backspace
查看开关节点参考抽屉Tab
查看打开完整快捷键说明?
查看关闭当前帮助或窗口Esc
提示

macOS 使用 Cmd 代替表中的 Ctrl

点击页眉右侧的 ? 会打开快捷帮助菜单,按导航、选择、节点编辑、字段与端口、Group 等职责集中展示全部手势:

FlowGraph Editor 的 Keyboard Shortcuts and Help 面板

把一段完整流程收进 Group

Group 可以将多个节点组合成一个可以进入的子图,它适合用于封装目标选择、重复结算或一段完整的表现流程,让父图只保留最重要的执行关系

FlowGraph Group 组节点

常用操作

  1. 选中至少两个节点,再按 Ctrl + G,会把全部选中节点共同收进一个新的外层 Group(已有 Group 也可以参与选择)
  2. 双击 Group 主体或按 Ctrl + 进入内部
  3. 双击标题或使用右键菜单为 Group 重命名
  4. 使用左上角面包屑或 Ctrl + 返回父图
  5. 选中 Group 后按 Delete 会解包并保留内部节点
  6. 需要连同Group节点与内部节点一起删除,使用 Shift + Delete
特性
  • 进入 Group 后仍可调整内部普通节点的字段名称、端口名称与顺序

  • 未在 Group 内继续连接的输入和输出会自动成为边界端口

  • 单击字段标签则可以让需要经常调整的字段直接显示在 Group 正面,再次单击即可收回

  • Group 不会自动判断哪些边界端口有用,要让父图保持简洁,应先完成内部连接,再只把需要频繁调整的字段显示到 Group 正面

  • Group 不在 Add Node 菜单中,需要从当前选区创建

  • 当内部只剩一个节点时,为了避免留下没有层级价值的空壳,Group将会自动解包

  • 复制 Group 时,内部节点和内部连接会一并复制,粘贴结果是与原 Group 分离的独立副本

  • Card Group 只能粘贴到 Card Behavior,Status Group 和 Enemy Group 也分别只能在相同拥有者类型间复制

Group 的边界端口、正面字段与进入方式详见 Group 节点

同一套画布覆盖 Card、Status 与 Enemy

Card、Status 与 Enemy 共用相同的节点编辑、连线、Group 与校验方式,差别仅在各自能接收的 Entry、可读取的拥有者上下文,以及 Enemy 专属的 Intent

拥有者典型 Entry当前内容特有的行为组织
CardOn Card Played围绕本次卡牌、选中目标与实际结算结果组织行为
StatusOn Turn Start读取当前状态的 Type、Tags 与 Stacks,并在回合或结算时机持续响应
EnemyOn Enemy Behavior Start使用 Pattern 与 Leaf Intent 选择、预告并执行下一步行动

Status Behavior链

随包附带的预设状态 Poison 使用回合入口启动伤害,并直接读取当前状态层数作为本次结算值

Poison 的完整状态行为图,从 On Turn Start 读取状态层数并造成伤害

上图从 On Turn Start 进入 Deal DamageStatus Info.Stacks 通过数据连接提供伤害量,结算结果随后交给 Play Effect,同一张图因此同时表达了触发时机、动态数值、战斗变化与表现反馈

想要了解状态的回合响应、层数读取与伤害修改组合,请见 状态行为配方,能够介入结算的时机见 Hook 节点

Enemy Behavior链

Enemy Behavior 在相同画布上增加 Intent 节点族,用 Pattern 选择下一项行动,Leaf Intent 中的 Intent 字段定义预览类型,Out 后方的节点链则负责实际执行

Intent 节点适合表达的行动规律
Leaf Intent定义意图类型,并将 Out 后方的节点链作为实际行动
Sequence Pattern按固定顺序轮换行动
Weighted Random Pattern在当前有效行动中按权重选择
HP Threshold Pattern根据生命阈值切换行动计划
Once Per Battle整场战斗最多选择一次的行动
Every N Turns每隔指定回合数才允许选择的行动
提示
  • On Enemy Behavior Start 接入 Pattern 后,每条选择路径都应落到一个 Leaf Intent,设置 Intent 类型后,再从 Out 连接伤害、状态、卡牌或表现节点
  • Attack、Defend 与 Heal 的预览数值不是填写在 Leaf Intent 上,而是运行时从后方控制链中的第一个 Deal DamageChange Armor 或正数 Change HP 提取可用数值

Mire Reaper 的完整敌人行为图,模式节点选择 Leaf Intent 并执行各自行为体

上图通过 HP Threshold Pattern 实现对生命值的分阶段控制,再由 Weighted Random Pattern 从当前有效的 Leaf Intent 中选择行动,对于每个叶子节点,始终沿着自己的 Out 继续连接表现节点。因此,意图类型、可用的预览数值以及实际行动均能够沿同一条分支继续前进与结算

提示
  • Intent在游戏运行时显示的规则,并不会分散到每个 Intent 节点中,而是采用在Encounter下集中配置的方式实现,这能极大的简化配置
  • Hidden 不显示意图,IconOnly 只显示图标,Full 显示图标及可用的预览数值

敌人模式与行动体的常用组合见 敌人行为配方,全部叶节点与 Pattern 见 Intent 节点,显示规则与战斗配置见 遭遇战创作

可能的 Issues

FlowGraph Editor 会在编辑过程中持续检查可以静态确认的结构问题,页眉出现 Issues 徽标时可以打开问题列表,带 Node ID 的问题会在行末提供 Ping,用于定位相关y异常节点,当前检查将会覆盖以下问题:

问题范围Issues 能发现的情况
节点身份Node ID 缺失或重复
拥有者边界当前 Card、Status 或 Enemy 不允许使用这个节点
事件入口On Internal Event 缺少事件名称,或 On GES Event 缺少事件引用
自定义数据节点自定义 OperatorNodeSourceNodeSelectorNode 没有可发布的数据输出
普通节点连接引用连接指向已经不存在的节点或端口
普通节点端口契约输入与输出类型不兼容,或连接记录的 Kind 与输出端口不一致
Group 内部嵌套 Group 中存在上述结构问题
注意事项
  • Group 边界连接目前不进入上述连接检查,边界连线变红或出现警告图标时,应直接根据悬停提示修正

  • Issues 不检查空图、缺少业务上必需的 Entry、不可达节点、未连接输入或行为结果是否符合设计,因此 0 Issues 只表示当前结构检查通过,并不等于行为已经在战斗中正确执行

  • 嵌套 Group 的问题同样会进入列表,从根图点击这类问题时不一定能够直接聚焦内部节点,应先进入对应 Group 再完成修复

  • 同一批结构问题也会进入卡牌编辑器,常见修复方法见FlowGraph 创作错误