跳到主要内容

Flow 节点

Guide

查找并配置用于分支、重复、延迟、分组与安排执行顺序的节点

节点用法

Sequence

从上到下依次执行各个步骤;一个入口需要按固定顺序启动多段独立逻辑时使用,例如先造成伤害,再修改状态,最后播放表现效果

输入端口

  • In(控制):开始执行 Sequence

输出端口

  • Step0StepN(控制):按编号顺序各执行一次,端口数量由 Outputs 决定

参数

  • Outputs(整数):2;顺序步骤数量,修改后会重建可见输出端口

步骤会按编号顺序执行,前一步的完整控制路径结束后才会启动下一步;路径遇到 WaitChoice 时,整个效果波次会在该位置暂停,恢复后的分支完成后才继续后面的步骤;如果多个路径只能选一个,应使用 BranchSwitch

Outputs 设为 0 或负数时,没有任何 Step 路径会执行

带有三个顺序输出的 Sequence 节点

Branch

根据布尔值在两条路径中选择一条,常见连接是 Condition.ResultBranch.Condition

输入端口

  • In(控制):触发本次判断
  • Condition(布尔):trueTruefalse 或未连接时走 False

输出端口

  • True(控制):条件为 true 时执行
  • False(控制):条件为 false 时执行

参数:

每次只会执行一个输出;如果 false 时什么都不做,可以不连接 False

带有 True 和 False 输出的 Branch 节点

Switch

用整数或字符串匹配多个 case,适合卡牌类型、意图名称、回合模式等超过两种结果的判断

输入端口

  • In(控制):开始匹配 case
  • On(整数或字符串):与 Case Values 比较,类型跟随 Kind

输出端口

  • Case 1Case N(控制):每个值对应一个界面端口,顺序与 Cases 一致
  • Default(控制):没有 case 匹配时执行,连接 On 后和 case 输出一起显示

参数

  • Kind(内部字段)Int / String):推断前为 Int;根据连接到 On 的数据类型自动设置,编辑器中没有单独的选择器
  • CasesCase Values(整数或字符串列表):连接 On 前为空;UI 数量包含 Default,其余每一行保存一个 case 值并创建一个可见 case 输出

字符串采用区分大小写的精确匹配;case 从上到下检查,重复值只会命中第一项;Int 模式下无法解析为整数的条目会被跳过

null 字符串输入按空字符串处理,因此可以命中空字符串 case

编辑器需要先连接 On 才能配置 case 或看到这些控制输出,可见的 Cases 数量包含最后的 Default,因此 Cases = 3 会创建两个可编辑值,以及 Case 1Case 2Default 三个界面输出

以 Attack 和 Defend 为字符串 case 的 Switch 节点

Gate

只有布尔条件为 true 时才让执行继续,适合不需要单独处理 false 分支的简洁前置条件

输入端口

  • In(控制):检查 Gate
  • Allow(布尔):true 时放行,false 时终止当前路径

输出端口

  • Out(控制):仅在 Allow 为 true 时执行

参数:

未连接的 Allow 为 false,执行会停在这里;两个结果都要执行不同逻辑时应使用 Branch

带有 Allow 输入的 Gate 节点

Loop

按固定次数重复同一段逻辑,需要按轮次缩放数值、选择元素或显示编号时可以使用从 0 开始的 Index

输入端口

  • In(控制):开始循环
  • Count(整数):Body 的执行次数,未连接时使用同名字段

输出端口

  • Body(控制):每轮执行一次
  • Done(控制):所有轮次结束后执行,次数为零或负数时也会直接执行
  • Index(整数):当前轮次,从 0 开始

参数

  • Count(整数):1Count 端口未连接时的备用值

每轮 Body 的完整路径执行完成后才进入下一轮,路径遇到 WaitChoice 时会恢复本轮的 Index、节点结果与当前效果范围变量,完成恢复路径后再继续;所有轮次结束后,Done 与外层效果波次完成通知都只发出一次;已有集合并且需要拿到当前元素时,应使用 Foreach

带有 Body、Done 和 Index 输出的 Loop 节点

Foreach

按集合原有顺序逐个处理单位、卡牌或状态,并提供当前元素和从 0 开始的索引

输入端口

  • In(控制):开始遍历
  • Collection(单位、卡牌或状态集合):待遍历集合,类型跟随 Kind

输出端口

  • Body(控制):每个元素执行一次
  • Done(控制):最后一个元素结束后执行,集合为空或 null 时直接执行
  • Element(单位、卡牌或状态引用):当前元素,类型跟随 Kind
  • Index(整数):当前元素索引,从 0 开始

参数

  • Kind(内部字段)Unit / Card / Status):推断前为 Unit;根据连接到 Collection 的集合自动设置,不能直接编辑

应把 Element 连接给 Body 内的 Action;如果连接整个集合,同一个集合动作会在每轮重复执行

集合中的 null 元素也会占用一轮,此时 Body 仍会执行,Element 为 null

Foreach 开始时会创建集合的浅快照,Body 增加、移除或移动原集合成员不会改变本次遍历已经确定的元素与顺序,但快照中的单位、卡牌或状态仍是同一个实时对象,对对象字段的修改会立即可见

每个元素的完整 Body 路径结束后才会处理下一个元素,路径遇到 WaitChoice 时会恢复当前 ElementIndex、节点结果与当前效果范围变量,完成恢复路径后再继续遍历;捕获的集合处理完后,Done 与外层效果波次完成通知都只发出一次

用于单位集合的 Foreach 节点

While

在布尔条件保持 true 时反复执行 Body,仅适用于 Body 会改变条件所读取数据的场景

输入端口

  • In(控制):开始检查条件
  • Condition(布尔):每轮开始前重新读取

输出端口

  • Body(控制):条件为 true 时执行
  • Done(控制):条件变为 false 后执行

参数:

While 必须最终变为 false

Condition 始终为 true 时,运行时会持续迭代并在超过流图遍历预算后中止执行与记录错误;Body 未连接时不会改变条件,因此不能让 true 条件自行结束;WaitChoice 可以暂停当前轮次,恢复后才会重新检查条件,但它们不会替代明确的退出条件;跨回合循环应使用 Delayed Trigger

Body 进入 WaitChoice 时,运行时会恢复本轮的节点结果与当前效果范围变量,完成恢复路径后再重新计算 Condition;条件变为 false 时,Done 与外层效果波次完成通知都只发出一次

带有 Body 和 Done 输出的 While 节点

Wait

暂停当前效果波次后再继续,短暂的表现节奏使用 Seconds,需要由其他表现代码明确释放时使用 Animation

输入端口

  • In(控制):开始等待
  • Seconds(浮点数):Seconds 模式显示,连接值会覆盖 Inspector 时长
  • AnimationId(字符串):Animation 模式显示,连接值会覆盖 Inspector ID

输出端口

  • Out(控制):等待结束后执行,无法建立等待任务时立即执行

参数

  • ModeSeconds / Animation):Seconds;决定显示的输入端口和等待方式
  • Seconds(浮点数):0.5Seconds 模式的等待时长
  • Animation Id(字符串):空;Animation 模式等待的 Gate reason

Seconds 小于等于 0 时立即继续;Animation 不会自动监听 Animator 的 clip 或 trigger,表现层必须在节点执行前已经 Acquire 同名的 AnimationGate reason;reason 没有被持有时会立即继续,被持有时会等到释放,或在五秒安全超时后继续,空 Animation Id 会使用 Flow Wait

建立实际等待时,运行时会保存当前上下文槽位、流图结果与运行变量,恢复后从这份快照继续 Out,其中引用的单位、卡牌和状态仍是实时对象;等待期间,当前入口的其他控制分支、卡牌与状态生命周期以及战斗阶段推进都会保持暂停,玩家不能打出另一张牌或结束回合;Out 恢复后的路径完成后,运行时才会继续同一效果波次

按秒等待的 Wait 节点

Delayed Trigger

把一段逻辑登记到之后的战斗阶段执行,同时让当前图从 Done 继续,适合倒计时效果,不适合短暂的画面停顿

输入端口

  • In(控制):尝试登记延迟逻辑

输出端口

  • Body(控制):保存为未来执行入口,本次不会立即运行
  • Done(控制):登记后立即继续

参数

  • Delay Turns(整数):1;等待多少次所选阶段边界后触发,零或负数不登记 Body
  • Fire AtTick PhasePlayerTurnEnd / PlayerTurnStart / EnemyPhaseEnd):PlayerTurnStart;用于倒计时和触发的阶段边界,在该边界处理期间新登记的项从下一次边界开始计数
  • Cancel If Source DiesCancel On Source Death(布尔):关闭;来源登记时已经死亡会拒绝排队,触发前死亡会取消待执行逻辑

只有 Body 已连接且 Delay Turns 大于零时才会登记延迟逻辑;设置为零或负数时仍然只走 Done,不会改成立即执行 Body

登记时会复制当前持有者、SourceTargetAttacker、卡牌、状态、事件参数、流图结果与运行变量,触发时继续使用这份上下文快照;快照固定这些槽位与集合成员,但其中引用的单位、卡牌和状态仍是实时对象,触发前发生的 HP、层数或实例状态变化仍然可见;OnDelayedTriggerFired 只有在未来 Body 的完整路径及其中嵌套的 WaitChoice 恢复路径都完成后才发布;战斗结束或被新战斗替换时,旧战斗的延迟项与回调也不会继续执行

每个排队的 PendingDelayedTrigger 都会公开当前战斗内的 TriggerId,并通过 CardDefinitionSnapshot 保存登记时关联的卡牌定义;排队、触发与取消事件会沿用该值作为 TriggerId,同时携带 SourceUnitIdTargetUnitIdTickPhaseCard,多个倒计时因此可以独立追踪

带有延迟 Body 和即时 Done 输出的 Delayed Trigger 节点

Choice

把单位、卡牌或状态集合交给运行时选择界面,再根据玩家确认或跳过进入对应路径,用于需要玩家作出选择的效果

输入端口

  • In(控制):打开选择界面
  • Options(单位、卡牌或状态集合):候选集合,null 元素会被忽略,类型跟随 Kind
  • Count(整数):最大选择数量,连接值会覆盖节点字段

输出端口

  • OnChosen(控制):玩家确认有效选择后执行
  • Skipped(控制):玩家跳过,或当前没有 presenter / 候选项时执行
  • Chosen(单位、卡牌或状态集合):玩家确认的结果,类型跟随 Kind

参数

  • Kind(内部字段)Unit / Card / Status):推断前为 Card;根据连接到 Options 的集合自动设置,不能直接编辑
  • Prompt(字符串):空;选择界面显示的提示
  • Count(整数):1;端口未连接时使用的最多选择数量
  • ModeExactly / UpTo):Exactly;必须选满有效数量,或最多选择该数量
  • Allow Skip(布尔):关闭;是否允许不选任何内容直接确认

实际最大数量会先读取已连接的 Count,再限制为不超过候选数,有候选时也不会低于一个;UpTo 在关闭跳过时仍至少要选一个;如果 Presenter 不存在或候选集合为空,即使关闭 Allow Skip 也会走 Skipped

选择界面打开后,整个效果波次、卡牌与状态生命周期以及战斗阶段推进都会暂停,玩家也不能打出另一张牌或结束回合;提交选择或跳过并完成对应分支后,排队中的同级控制分支与状态响应会按原有因果顺序恢复,运行时再继续同一波次中的后续路径

用于选择卡牌的 Choice 节点

本页总览