跳到主要内容

Action 节点

GCS · Built-In Node Library

Action 节点负责改变战斗状态。27 个内置节点覆盖伤害、HP、护甲、能量、卡牌、状态、单位、回合、变量和 Hook 写入。

面向正在决定一张卡、一个状态或一个敌人行为到底需要哪种状态变化的图作者。

Action 节点位于主控制路径上,通常紧跟在 Entry、BranchLoopChoice 之后。Get 节点向它们提供目标和数值,FX 节点展示它们产生的结果。

Poison Arrow 是这个模式的最小样本。两个 Action 节点承担了全部设计:Deal Damage 对对手造成 3 点伤害,Change Status 再叠 2 层 Poison。入口负责启动图,效果块负责展示结果,两者都不改变战斗状态。

Poison Arrow 的图:Deal Damage 和 Change Status 在入口与效果块之间完成全部玩法工作

菜单组与基类

这些节点在 Add Node 菜单中属于 Action。它们背后的扩展基类 MutatorNode 只在你用 C# 写自定义节点时才会出现。


伤害、HP、护甲、能量和状态

节点用途输入与设置输出常见搭配何时避免
Deal Damage通过伤害管线施加伤害TargetTargetSourceAmountIgnoreArmorDealtOpponent UnitAll EnemiesDamage Dealt HookShow Floating Text设计是治疗或直接改 HP;用 Change HP
Change HP治疗,或直接改变当前/最大 HPTargetTargetSourceAffect(Current 或 Max)、Mode(Delta 或 Set)、AmountChangedUnit InfoHP Gain HookHP Loss Hook、治疗浮动文字变化应该算作伤害;用 Deal Damage
Change Armor增加、移除或设置护甲TargetTargetSourceModeAmountChangedArmor Gain HookArmor Loss HookShow Floating Text值其实是卡牌费用或状态层数
Change Energy增加、消耗或设置玩家能量ModeAmountChangedPlayer EnergyEnergy Gain HookEnergy Spend Hook该改的是卡牌费用;用 Modify Card CostCard Cost Hook
Change Status增加、移除或设置某个状态的层数TargetTargetSourceStatusModeAmountChangedAll EnemiesUnit Status Stacks、状态类 Hook要移除的是一组特定状态实例;用 Remove Statuses
Remove Statuses从一个或多个单位上移除状态实例TargetStatusesTargetSourceFilterStatus Info、净化效果只需要减层数;用 Change Status
Reapply Status重新运行一个已有状态的应用行为Status状态生命周期图要从零叠层数;用 Change Status

demo 状态 Poison 展示了这张表在状态图里的用法,不只是卡牌图。On Turn Start 触发时,Deal Damage 以 Self 为目标,AmountStatus Info.Stacks 取值,并勾选 IgnoreArmor,让毒像它该有的样子无视护甲。后面的效果块再读取 Dealt 来显示浮动数字:

Poison 的状态图:Deal Damage 勾选 Ignore Armor,Amount 由 Status Info 的层数驱动,Dealt 再传给效果块


卡牌与牌堆

节点用途输入与设置输出常见搭配何时避免
Draw Cards按数量抽牌,或抽到手牌上限Mode(Count 或 ToHandLimit)、CountDrawnDraw Count HookCards Drawn This Turn、抽牌表现要创建卡牌;用 Add Cards
Add Cards把一个卡牌资产加进某个牌堆CardIdPilePositionAddedUpgrade CardsMove Cards、生成卡配方要移动已有卡牌实例;用 Move Cards
Move Cards把已有卡牌移到某个牌堆CardsCardsSourcePilePositionCard PilesFilterTake、弃牌和消耗效果要创建新的卡牌实例
Play Card走正常出牌流程打出一个卡牌实例CardTargetCardSourceTargetSourcePick ElementCard Piles、重放类效果只想运行卡牌行为、不走正常出牌处理;用 Replay Card
Replay Card再跑一次某张卡的行为CardCardSourceThis Card、连击效果这张卡应该像普通出牌一样支付费用并移动
Transform Card把一个卡牌实例变成另一张卡CardCardSourceNewCardThis CardCard Piles、升级树想要的是临时费用或属性修正
Upgrade Cards升级已有卡牌CardsCardsSourceCard PilesFilter、奖励效果要加的是一张全新的已升级卡
Remove Cards移除已有卡牌实例CardsCardsSourceFilterTake、消耗或净化机制卡应该去消耗堆或弃牌堆;用 Move Cards
Modify Card Cost给卡牌添加定时费用修正CardsCardsSourceModeAmountDurationTurnsCard Cost HookFilter、连击卡费用在每次可出牌检查时都依赖状态;用 Card Cost Hook
Shuffle Draw Pile洗当前抽牌堆On Draw Pile Shuffled、牌堆配方要重排的是临时集合;用 Shuffle

单位与回合

节点用途输入与设置输出常见搭配何时避免
Spawn Unit在战斗中创建单位UnitMaxOnFieldSpawnedOn Unit Spawned、召唤效果要复活已被击败的单位;用 Revive Unit
Despawn Unit移除单位,不带死亡语义TargetTargetSource召唤清理、临时单位应该发生玩家可见的死亡或击杀奖励
Kill Unit击杀一个或多个单位TargetTargetSourceOn Unit Died、处决效果只想临时移除、不触发死亡
Revive Unit复活已被击败的单位TargetTargetSourceHPPercentOn Unit Spawned、复活效果要创建新单位;用 Spawn Unit
Skip Next Turn让一个单位跳过它的下一回合TargetTargetSourceChange Status、眩晕效果需要立即改变当前回合顺序
End Turn结束当前回合紧急战斗规则、脚本化遭遇战普通卡牌结算应该正常继续
Extra Turn授予额外回合稀有的 Boss 或玩家强力效果简单的能量或抽牌奖励就够了

变量与 Hook

节点用途输入与设置输出常见搭配何时避免
Set Variable存储一个命名值NameKindModeBattleScope、值字段VariableBranch、跨入口共享的状态值只读一次;直接连线
Write Hook为当前活动 Hook 写入替换值KindValueBoolValue任意 Hook 入口、数学和条件节点图从普通入口启动
Cancel Hook取消当前活动 Hook(在支持取消的 Hook 上)Card Playable Hook、阻止类机制只需要改一个数字;用 Write Hook

先改状态,再放反馈

任何带状态变化的图,默认顺序是:

  1. 选择或计算目标
  2. 运行 Action 节点
  3. 读它的结果输出
  4. 基于该结果显示浮动文字、VFX、SFX、动画或镜头反馈

先播反馈再跑动作的图,可能在状态变化未发生时仍播放成功动画。DealtChanged 这类结果输出存在的意义,就是让表现读到提交后的值,而不是配置值。


动作未生效时

必需的目标、卡牌、状态或单位解析不出来时,大多数 Action 节点会直接跳过状态修改。这让运行中的战斗保持稳定,但也意味着图可能没有报错却没有产生效果。当效果没有出现时,先检查解析链,再检查节点本身:

症状检查
伤害没有效果Target 为空、选错队伍,或数值经 Hook 后归零
状态一直不出现Status 字段没设置,或目标集合为空
卡牌移动没有效果CardsSource 指向的牌堆里没有匹配的卡
费用修正一直不显示Duration 已过期,或卡牌集合为空
Hook 值没有变化图不是从 Hook 启动,或 Write Hook.Kind 选错了

Game Card Monitor 的 Flow 标签能显示哪些节点实际执行了,通常比只看画面结果更可靠。