跳到主要内容

目标选择

Guide

先确定玩家怎样选择目标,再让 Behavior 使用同一对象或集合完成实际结算

很重要的一个声明

卡牌上的 Target 决定出牌交互,Behavior 中的目标来源决定 Action 实际影响谁,两者必须表达同一范围,否则卡牌可能允许玩家选择一个目标,却在结算时影响另一个对象

Card Target 决定玩家输入

Target玩家操作Behavior 的常见目标来源
None不选择单位Behavior 自行决定单位、卡牌或无目标规则
Single Enemy选择一个存活敌人Opponent 读取玩家已提交的敌人
All Enemies不选择单位AllEnemies 解析全部存活敌人
Self不选择单位Self 解析玩家
提示

Single Enemy 会在提交前显示瞄准箭头和可选单位高亮

Single Enemy 卡牌正在瞄准一个高亮的存活敌人

上图中的卡牌仍处于目标选择阶段,只有玩家点击合法敌人后才会提交出牌,Behavior 使用 Opponent 时会读取这次选择

All Enemies 不经过单目标选择,Behavior 应使用 AllEnemies,让所有存活敌人收到卡牌文本承诺的范围效果

Meteor Strike 对三个存活敌人同时结算 15 点伤害

上图中的 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 依次完成筛选、排序和数量截取

  1. 用 Filter 保留符合条件的单位或卡牌
  2. 用 Sort 按 HP、费用或其他数值排序
  3. 用 Pick、Take 或 Random 取得 Action 需要的对象
  • 在 Action 前检查集合是否为空,并用 Branch 进入备用路径

  • 在卡牌描述中写清目标限制

  • 让失败路径提供可见反馈,或在出牌前阻止不合法操作 Card Piles 经过 Filter 与 Random Elements,再由 Move Cards 把一张匹配卡牌移入手牌

上图先从抽牌堆筛选基础攻击牌,再随机选择一张并移入手牌,单位目标也使用同一结构,例如把 AllEnemies 按 HP 升序排序,再取第一个元素,即可得到生命最低的存活敌人

空结果不会自动变成备用效果

内置 Action 会跳过空、死亡或不合法的目标,最终集合为空时,Action 不会产生效果,也不会自动选择其他对象

提示

如果空结果不符合卡牌文本或玩家预期,应在 Behavior 中显式处理

OpponentUnitSourceCardSource 和节点名称用于编辑器配置,不应直接写入玩家可见的卡牌描述,描述应明确表达最终对象,例如“对选中的敌人造成 8 点伤害”或“对所有敌人施加 2 层灼烧”