跳到主要内容

FlowGraph 模型

GCS · Core Concepts

GCS 使用 FlowGraph 描述卡牌效果、状态触发和敌人回合:入口定义时机,节点定义行为,端口定义输入和输出值。

适用于创建复杂 FlowGraph 前建立模型;也适用于排查节点行为与字段配置不一致的问题。

FlowGraph 是 GCS 的行为创作模型。设计者通过连接节点来构建卡牌、状态、敌人和表现逻辑,不需要为每个效果写代码。一张图读起来就像一句话:

当这个入口发生时,使用这些目标和数值,运行这些动作

在 demo 卡牌 Poison Arrow 中,图从左到右依次执行:On Card Played 入口,一个目标为对手、数值为 3 的 Deal Damage 节点,一个播放箭矢命中效果的 Play Effect 组,一个叠加 2 层 Poison 的 Change Status 节点,最后播放毒雾效果。

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


入口

入口(entry)启动一张图,对应行为发生的时机:卡牌被打出、敌人回合开始、状态被施加、数值 hook 被触发,或内部事件被抛出。没有有效入口的图不会在运行时产生用户可见行为。创建图时,应先确定玩家会在什么时机体验到该效果。


Hook

Hook 修改或取消一个正在发生的数值:增加造成的伤害、减少受到的伤害、改变卡牌费用、改变抽牌数量,或阻止状态被施加。

Hook 和动作的区别来自玩家预期。玩家会理解为修正器的规则,例如"力量使攻击 +2",适合实现为 hook。玩家会理解为卡牌主要效果的规则,例如"这张牌造成 8 点伤害",应实现为普通动作。


节点分组

GCS 内置 140+ 节点,分为九个 Add Node 菜单分组。搜索节点时,应按目标效果搜索,而不是按 C# 类型名搜索:

分组面向用户的用途
Entry从战斗、回合、卡牌、状态、伤害、能量、事件或单位时机启动图
Hook在 GCS 提交某个数值之前修改或取消它
Action改变战斗状态:伤害、治疗、护甲、状态、卡牌、能量、回合
Get读取上下文:当前卡牌、来源单位、回合数、牌堆、变量、单位、状态
Operator计算、比较、过滤、排序、转换或组合数值
Flow路由执行:sequence、branch、gate、loop、switch、choice、wait、delayed trigger
Intent构建敌人意图和目标模式
FX展示视觉、音频、动画、浮动文字、移动或镜头反馈
Event触发(Raise) GCS 内部事件或可选的 GES 事件

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


端口

端口用于连接节点,分为两类。控制端口决定执行顺序;数据端口在节点之间传递数值、目标、卡牌、状态和结果。

三条端口行为值得记住:

  • 标量字段(数字、布尔、文本)可以暴露为输入端口;
  • <Name>Source 字段可以暴露为单位或卡牌输入;
  • 结果输出会把节点的产出发布给下游节点读取

当一个节点同时有字段值和已连接端口时,已连接端口优先生效。字段可以视为默认值,端口用于动态覆盖。

Poison Arrow 使用默认值:它的 Deal DamageAmount 保持为普通字段,值为 3。若一张卡牌的伤害需要随回合成长,可以把 Cards Played This Turn 等节点经 Math Binary 接入同一个 Amount 端口;此时字段值只在断开连接后才生效。


上下文

图节点不会脱离上下文运行。每次执行都带有来源单位、已选择目标、当前卡牌或状态、战斗状态、传入的 hook 值、变量、事件参数,以及用于安全修改状态的 controller。

上下文使同一个 Deal Damage 节点可以用于玩家卡牌、敌人行动和状态反应。节点描述效果本身,上下文说明来源、目标和战斗状态。


创作规则

先从用户想做出的结果出发,再挑节点:

  • "对选中的敌人造成 8 点伤害"从目标模式和伤害开始
  • "如果目标有标记,抽一张牌"从选择开始,接条件,再接抽牌
  • "受到的伤害减少 2 点"从 damage-taken hook 开始

当一个节点或下拉选项已经能表达作者意图时,不要把内部代码概念暴露给内容作者。FlowGraph 是做卡工具,不是 C# 类型系统。