Game Card Monitor
七个实时标签页覆盖一场运行中的战斗:状态、牌堆、单位、阶段、动画门、图执行和事件。
面向所有在 Play Mode 里调试内容的人。Monitor 用运行时数据帮助定位问题。Game Card Monitor 是 GCS 的 Play Mode 调试窗口。制作卡牌、状态、敌人和遭遇战时建议保持打开:它显示的是改动是否进入运行时,而不只是 Inspector 是否接受了字段。从 Unity 菜单打开:
Tools/TinyGiants/GCS/Game Card Monitor
Monitor 读的是运行时状态,战斗场景跑起来它才有价值。页眉徽标在 Edit Mode 显示 INACTIVE,采样中显示 LIVE,冻结时显示 PAUSED。退出 Play Mode 时已捕获的数据会清空
七个标签页
标签页按固定顺序排列:
| Tab | 它回答的问题 |
|---|---|
Battle | 战斗是否活动?当前 encounter、phase、turn 是什么,外加玩家快照和敌人列表 |
Pile | 每张卡此刻在哪个牌堆:抽牌堆、手牌、弃牌堆、消耗(exhaust)堆,还是 master deck |
Unit | 每个单位的 HP、护甲、带层数的状态、当前意图、队伍和存活状态 |
Phase | 当前战斗阶段,以及一份最新在前的完整转换历史 |
Gate | 动画门:哪些表现持有正在暂停阶段推进,附 acquire/release 日志 |
Flow | 执行器上报的每一次 FlowGraph 运行,最新在前,带汇总 |
Event | 按顺序收到的 GCS 事件,加上事件通道上的 dispatcher probe 流量 |
标签页通常需要组合使用。一个出牌问题通常从 Battle 或 Pile 开始,在 Flow 或 Unit 中确认结果
Battle
战斗总览以快照徽章开场:阶段、回合数、当前行动方、本回合已出牌数;有待定选择或动画门持有时还会追加对应徽章。往下是 encounter 名称、手牌上限、每回合抽牌规则和待触发的延迟效果,然后是带 HP、护甲、能量的玩家卡片,以及每个敌人一张卡片,标着等级和预告的意图

Pile
确认卡牌流转最快的方式。汇总徽章统计 Hand、Draw、Discard、Exhaust 和 master deck;每个牌堆区块列出卡牌的实例 id、名称和类型,手牌行还额外显示经过 Hook 和修正后的当前实际费用。一张打出的卡应该在图结算的那一刻离开手牌,出现在弃牌堆(或消耗堆):

Unit
每个在场单位一个区块:队伍徽章、等级、必要时的 DEAD 标记、带护甲覆盖层的 HP 条,以及每个状态和它的层数,按增益减益着色。图中猎人的 Scout 满血站着,Plague Stalker 则挂着 Poison × 2。敌人区块额外有一块 Pattern Walk,显示每个意图模式节点当前走到哪一步,Sequence Pattern 本回合是否推进,也在这里检查:

Phase
顶部是当前阶段和回合,下面是最新在前的完整转换历史,每条带回合戳。当一个状态"本该在回合结束触发"却没有触发时,这个标签页能确认回合是否已经结束:

Gate
动画门在表现播放期间暂停阶段推进。Live 区块统计当前持有者数量并显示超时预算;Active Reasons 逐个列出持有原因。Recent Acquire / Release 日志记录每次 ACQUIRE 和 RELEASE、它的原因和之后的持有者数量,是排查战斗停滞的重要依据:

Flow
每次图执行,最新在前。汇总徽章统计捕获次数、总耗时、总节点数和最深循环层数。每行写明拥有者和触发时机:图中 Poison Arrow 的出牌图跑了 10 个节点。超过 8 ms 的行会被标记,这是失控循环的预警:

Event
两个区块用于确认事件是否触发。GCS Channel 按顺序列出 Monitor 订阅的广播,附可读细节:哪张卡打向了哪个单位、谁的 HP 变成了多少。Dispatcher Probes 记录原始通道流量和每次 raise 的订阅者数量,可以把"监听器没有响应"拆成"事件未触发"和"订阅错误"两种情况:

工具栏
Pause 和 Clear All 始终可用。过滤框、Follow、Export 和按标签页的 Clear 只出现在四个流式标签页上:Phase、Gate、Flow、Event
| Control | 用途 |
|---|---|
| Pause | 冻结采样,让你读清某个瞬间而不被滚走。徽标切到 PAUSED,按钮变成 Resume |
| Clear All | 复现下一次操作前,清掉全部已捕获的采样和事件 |
| 过滤框 | 在战斗持续运行时收窄流式输出。Export 会遵循过滤 |
| Follow | 让最新条目保持在顶部。向下滚动会自动脱开,点 Follow 重新跟随 |
| Export | 把当前视图复制到剪贴板,用于 bug 报告或前后对比 |
| Clear | 只清当前标签页的流,其他标签页不受影响 |
左右方向键切换标签页。若某个文本框持有焦点,键盘输入会留在文本框里;方向键没反应时,先点一下 Monitor 主体区域
调试流程
战斗没有开始
Battle:没有活动战斗,说明 bootstrap 或 manager 没有启动它Event:没有启动事件,说明场景没有进入 GCS 运行时- Game Card Editor 的 validation:encounter、玩家、敌人或数据库引用不完整
- Console 的第一条错误,后面的错误通常只是连锁反应
卡牌打不出去
Battle:现在是玩家阶段吗?能量够吗?Pile:这张卡真的在手牌堆里吗?Unit:选中的目标存在、存活、属于预期队伍吗?Flow:这张卡的行为图存在并且能解析吗?
卡牌打出但没有效果
Flow:入口匹配了吗?节点运行了吗?Event:预期的运行时事件触发了吗?Unit:HP、护甲或状态动了吗?Pile:卡牌按预期进了弃牌堆或消耗堆吗?
如果运行时状态变了但画面没变,问题通常出在表现引用,不需要重写已经生效的卡牌逻辑
战斗卡住不动
Gate:动画门按原因列出当前的持有者。一个只 acquire 不 release 的持有者会让阶段机一直等- 门的 acquire/release 日志能精确显示哪个效果在什么时候拿走了持有
- 日志里出现门超时,说明某个动画或 FX 回调从未上报完成
敌人什么都不做
Phase:战斗真的进入敌人阶段了吗?Unit:敌人存活吗?显示当前意图了吗?Flow:敌人的行为图运行了吗?- Game Card Editor 的
Enemy模式:缺行为图或缺预制体都会让敌人没有可见行动
状态没有更新
Unit:状态在单位身上吗?几层?Flow:状态的入口、Hook 或触发器运行了吗?Phase:你预期的时机真的发生了吗?- Game Card Editor 的
Status模式:层数规则、衰减规则和图引用
机制问题还是表现问题?
Monitor 可以帮助区分机制问题和表现问题:
| 证据 | 含义 |
|---|---|
| 运行时状态变了 | 图或 controller 工作正常。去查 UI、预制体、动画、音频、VFX |
| 运行时状态没变 | 去查目标、内容引用、图执行、Hook |
| 事件触发了,监听器没反应 | 去查订阅时机、事件名、参数类型、disposal |
| Flow 跑了,数值不对 | 去查输入端口、固定字段、结果输出、Hook 写入 |
做复杂卡牌时,建议在症状出现之前就打开 Monitor。逐步观察每个改动进入运行时,通常比问题出现后再还原整条链路更快