跳到主要内容

FlowGraph 窗口

GCS · Visual Editors

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 组

Poison Arrow 的行为图:On Card Played 连接 Deal Damage、VFX 效果节点、叠加 Poison 的 Change Status 和收尾的毒雾效果

谁拥有图

图是一个存储在拥有者资产内部的 GameEffectFlowGraph。没有单独的图资产需要管理,也不会丢

Owner常见图
Card打出行为、目标结算、卡牌专属表现
Status应用行为、触发器、Hook、层数反应、衰减行为
Enemy意图选择、意图预览数据、敌人回合行动

状态图和卡牌图在结构上一模一样,区别只在入口。以 Poison 为例,它响应的是回合时机而不是出牌:

Poison 状态的行为图,用生命周期入口驱动持续伤害

图看起来正确,但战斗没有变化?

图跟着拥有它的资产一起保存。如果运行时行为没有变化,先确认战斗场景使用的是刚编辑的那条数据库条目。另一个数据库里的重复条目是最常见原因


认识窗口

工具栏从左到右分四组:

分组按钮
导航Select 工具、Pan 工具、Frame All、Frame Selection、Select All、网格开关
节点Create Node、Delete、Copy、Paste
Group创建、解包、连节点一起删除、进入、退出、重命名
视图缩小、缩放百分比(双击可输入 25 到 200 的精确值)、放大、Undo、Redo

FlowGraph 窗口打开 demo 卡 Strike 的图,顶部横贯完整工具栏:导航、节点、Group、视图四组,缩放显示 100%

页眉还有两个控件。validation 发现问题时会出现 ⚠ Issues 徽标:点它列出问题,点某条问题跳到出错的节点。? 按钮打开快捷键总览,窗口里的每个手势都记录在那里

右侧边缘有节点参考抽屉。按 Tab 或点 手柄展开,然后选中任意节点,即可查看它的端口和字段说明。在参考面板里悬停某个端口,画布上对应的端口会同步高亮

目标按键
取景整张图Space
取景当前选区Ctrl+F
全选节点Ctrl+A
复制、粘贴、剪切Ctrl+CCtrl+VCtrl+X
把两个以上节点打包成 GroupCtrl+G
进入或退出 GroupCtrl+→Ctrl+←
删除 Group 但保留节点选中 Group 按 Delete
连节点一起删除 GroupShift+Delete
开关参考抽屉Tab
打开快捷键总览?
撤销、重做Ctrl+ZCtrl+Y
macOS

所有 Ctrl 换成 Cmd 即可

拖动节点时会自动对齐吸附到邻近节点。这些导航工具不改变战斗逻辑;它们用于保持大图的可读性和可维护性


Add Node 菜单分组

打开节点菜单有三种手势:双击空白画布弹出搜索框,右键选 Create Node 打开分类菜单,或者用工具栏按钮。GCS 内置 140+ 节点,分为九个组。按你想做出的创作结果搜索,不要按 C# 类型名搜索:

Group什么时候用
Entry从战斗、回合、卡牌、状态、伤害、能量、事件或单位时机启动图
Hook在 GCS 提交某个数值之前修改或取消它
Action改变战斗状态:伤害、HP、护甲、能量、卡牌、状态、回合、变量、单位
Get读取战斗状态:当前单位、目标单位、卡牌信息、牌堆、事件参数、变量
Operator比较、计算、过滤、排序、选取、转换、随机化或合并值
Flow组织执行顺序:SequenceBranchSwitchGateLoopWhileForeachWaitChoiceDelayed Trigger
FX请求 VFX、SFX、动画、浮动文字、相机震动、单位滑动或闪烁反馈
Intent构建敌人的预览意图和行为模式
Event触发(Raise)GCS 内部事件或可选的 GES 事件

Group 不在此菜单中。选中两个或多个节点并按 Ctrl+G,即可把它们打包成一个可折叠的 Group 节点。

名字跟编辑器一致

本文档全程使用 Add Node 菜单里的名字。MutatorNodeSourceNode 这类扩展基类只在你编写自定义节点时才重要


画布工作流

操作怎么做
添加节点双击空白画布,搜索,放置
连接控制端口从输出端口拖到输入端口,决定执行顺序
连接数据端口同样的拖法;用来在节点之间传递值、目标、卡牌、状态或集合
把输入提升为端口点字段旁边的插槽,然后把另一个节点接进来
重命名节点双击标题。点标题旁的箭头可以折叠
移动和分组节点直接拖,节点会自动对齐;Ctrl+G 把选区打包成 Group

把布局当作图的说明文档。入口放左边,主要玩法动作放中间,表现放右边,除非某个视觉确实必须发生在机制结算之前

循环和集合遵循同样的从左到右阅读顺序。Rapid Fire 射击四次,每次随机挑一个敌人:On Card Played 入口接一个设为 4 的 Loop,循环体里 Random ElementsAll Enemies 中抽一个目标,交给造成 3 点伤害的 Deal Damage

Rapid Fire 的图:Loop 节点执行四轮 Deal Damage,目标由随机选取的敌人提供


字段、端口和结果

大多数节点同时有固定字段和可选输入端口。当一个值本身就是卡牌设计的一部分("造成 8 点伤害""抽 2 张牌"),留在字段里。当它应该由另一个节点决定("造成等同护甲的伤害""按目标身上的状态数抽牌"),再提升成端口

结果端口的意义在于:最终结果可能和配置值不同。浮动文字应该读取 Deal DamageDealt 输出,而不是配置的伤害值,因为护甲、Hook 和状态规则都会影响最终数字


敌人意图图

敌人图多出 Intent 组:Sequence PatternHP Threshold PatternWeighted Random PatternOnce Per BattleEvery N Turns 这些模式节点决定敌人预告哪个 Leaf Intent,每个 Leaf 挂着敌人回合实际执行的行为体。Mire Reaper 这个 Boss 展示了完整体量下的形态:

Mire Reaper 敌人图:意图模式节点选择 Leaf Intent 及其行为体


Validation 反馈

页眉的 ⚠ Issues 徽标在每次编辑后重新统计。它针对的都是创作错误:

  • 拥有者跑不了的节点,比如把只属于卡牌的节点放进状态图
  • 内部事件入口没填事件名,或 GES 事件入口没指定事件
  • 连接指向已经不存在的节点或端口
  • 两个不兼容端口之间的连接
  • 自定义值节点没有声明任何输出端口,谁也读不到它

点徽标,再点某条问题,视图会聚焦到对应节点

先清问题,再调数值

带问题的图也许仍能运行,但缺失端口的连线可能导致卡牌效果不完整且没有明显报错。先清空问题列表,再调整数值和表现


保存与测试

编辑图之后:

  1. 编辑时 Unity 会把拥有图的资产标记为 dirty,关闭窗口时自动保存。中途也可以使用 Ctrl+S 主动保存
  2. 运行能触发这张图的最小战斗
  3. 根据图应该改变的内容,把 Game Card Monitor 停在 FlowUnitPileEvent 标签上
  4. 先确认运行时状态改对了,再评判表现效果

经得起维护的图形状

设计目标清晰形状
一张卡造成伤害并显示数字目标来源 → Deal Damage → 从 Dealt 取值的浮动文字
一张卡影响所有敌人All Enemies → 集合动作;每个目标需要独立表现时用 Foreach
一个状态改变受到的伤害Hook 入口 → Operator 节点 → Write Hook
一个敌人按固定套路行动Intent 模式 → Leaf Intent 节点 → 行为体
一个少见分支取决于当前状态Get 节点 → ConditionBranchGate

图名、Group 名和标签按玩家能看到的效果命名。"Burn burst on turn start" 比 "status handler branch 2" 更容易维护