目标选择
先确定玩家怎样选择目标,再让 Behavior 使用同一对象或集合完成实际结算
卡牌上的 Target 决定出牌交互,Behavior 中的目标来源决定 Action 实际影响谁,两者必须表达同一范围,否则卡牌可能允许玩家选择一个目标,却在结算时影响另一个对象
Card Target 决定玩家输入
| Target | 玩家操作 | Behavior 的常见目标来源 |
|---|---|---|
None | 不选择单位 | Behavior 自行决定单位、卡牌或无目标规则 |
Single Enemy | 选择一个存活敌人 | Opponent 读取玩家已提交的敌人 |
All Enemies | 不选择单位 | AllEnemies 解析全部存活敌人 |
Self | 不选择单位 | Self 解析玩家 |
Single Enemy 会在提交前显示瞄准箭头和可选单位高亮

上图中的卡牌仍处于目标选择阶段,只有玩家点击合法敌人后才会提交出牌,Behavior 使用 Opponent 时会读取这次选择
All Enemies 不经过单目标选择,Behavior 应使用 AllEnemies,让所有存活敌人收到卡牌文本承诺的范围效果

上图中的 Meteor Strike 对三个存活敌人同时结算 15 点伤害,说明 Card Target、Behavior 目标集合和玩家可见文本保持一致
Unit Source 从当前上下文解析单位
| Source | 解析结果 |
|---|---|
Self | 当前宿主:玩家卡牌中是玩家,Status 中是持有者,Enemy Behavior 中是当前敌人 |
Opponent | 玩家宿主下优先读取存活且非玩家的 Target,反应上下文没有这种目标时再读取实际存活的 Attacker,最后回退到第一个存活敌人;敌人宿主下解析玩家 |
AllEnemies | 全部存活敌人,不包含已死亡单位 |
AllUnits | 存活玩家与全部存活敌人 |
治疗、护甲和自我 Buff 通常使用 Self,单目标攻击使用 Opponent,范围规则使用 AllEnemies
已连接端口覆盖节点字段
当节点同时提供 Target 输入端口和 Source 字段时,连线具有更高优先级
Target 端口已连接 -> 使用连线传入的单位或集合
Target 端口未连接 -> 使用 Source 字段从当前上下文解析目标
这项规则允许同一个 Action 先以 Self 作为默认目标,随后通过 Selector 连线改为动态目标,切换端口前应确认原字段不再决定结果
Card Source 读取当前卡牌实例
| Source | 解析结果 |
|---|---|
ThisCard | 当前正在结算的 CardInstance |
HandPile | 当前手牌 |
DrawPile | 当前抽牌堆 |
DiscardPile | 当前弃牌堆 |
ExhaustPile | 当前消耗堆 |
AllPiles | 手牌、抽牌堆、弃牌堆与消耗堆的合并结果 |
这些来源在下游节点执行时读取当前牌堆,因此移动卡牌后再次求值会得到新的集合,需要保留移动前的结果时,应先保存快照
Selector 从集合中选出目标
当目标由规则而不是玩家点击决定时,使用 Selector 依次完成筛选、排序和数量截取
- 用 Filter 保留符合条件的单位或卡牌
- 用 Sort 按 HP、费用或其他数值排序
- 用 Pick、Take 或 Random 取得 Action 需要的对象
-
在 Action 前检查集合是否为空,并用 Branch 进入备用路径
-
在卡牌描述中写清目标限制
-
让失败路径提供可见反馈,或在出牌前阻止不合法操作

上图先从抽牌堆筛选基础攻击牌,再随机选择一张并移入手牌,单位目标也使用同一结构,例如把 AllEnemies 按 HP 升序排序,再取第一个元素,即可得到生命最低的存活敌人
空结果不会自动变成备用效果
内置 Action 会跳过空、死亡或不合法的目标,最终集合为空时,Action 不会产生效果,也不会自动选择其他对象
如果空结果不符合卡牌文本或玩家预期,应在 Behavior 中显式处理
Opponent、UnitSource、CardSource 和节点名称用于编辑器配置,不应直接写入玩家可见的卡牌描述,描述应明确表达最终对象,例如“对选中的敌人造成 8 点伤害”或“对所有敌人施加 2 层灼烧”