
joywayerandClaude Opus 5
6414fa2dfe
fix(enemy): 池化复活的敌人不再带着上一条命的能力冷却
EnemyBase.OnSpawn 里 InterruptAll 那行的注释写着「重置能力冷却」,
三处都不成立:
1. EnemyAbilityRegistry.InterruptAll 有 `if (ab.IsRunning)` 门;
2. EnemyAbilityBase.Interrupt 里还有一道 `if (!_isRunning) return`;
出生时没有能力在跑,循环体一次都不执行;
3. 即便执行到,末行是 `_cooldownEndTime = Time.time + cooldown * 0.5f`——
那是「中断后计半程冷却」的写入语义,本就不是清零。
冷却以绝对 Time.time 记时,于是上一条命的剩余冷却原样活到下一条命。
活路径是 EnemyRespawner.SpawnEnemy():敌人死亡归池、延迟复活后取出复用,
按 1.5–10 秒的冷却量级,新生的敌人有数秒出不了招。
修法是补一条真正的清除路径而非改动中断语义:
EnemyAbilityBase.ResetCooldown() 把 _cooldownEndTime 清回出生态的 -1,
EnemyAbilityRegistry.ResetAllCooldowns() 不看 IsRunning 逐个调用,
OnSpawn 显式调用它。原 InterruptAll 保留为兜底中断,但注释改为陈述它
实际做的事——那句失真的注释正是这个缺陷藏了这么久的原因。
测试的冷却全程由生产代码写入:Execute() 启真实协程(编辑模式下跑到首个
yield 即挂起,_isRunning 留 true),再由 Interrupt() 经真实路径写冷却,
不反射直写字段,否则测到的是伪造状态而非真实时序的产物。
验证:编译 0 错 0 警;EditMode 264/264。
修复前该用例是唯一变红的一条(263/264),失败值 5.0f 恰为
cooldown(10) × 0.5,精确指向上述第 3 点。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 11:13:49 +08:00
..
2026-07-27 13:38:05 +08:00
2026-07-24 11:56:07 +08:00
2026-07-24 14:55:17 +08:00
2026-07-29 17:20:12 +08:00
2026-07-29 11:22:15 +08:00
2026-07-30 16:45:51 +08:00
2026-05-23 19:10:29 +08:00
2026-07-21 16:18:07 +08:00
2026-05-26 13:04:38 +08:00
2026-07-21 11:35:39 +08:00
2026-05-26 13:04:38 +08:00
2026-07-30 12:43:01 +08:00
2026-07-24 14:55:17 +08:00
2026-07-28 13:28:52 +08:00
2026-05-23 19:10:29 +08:00
2026-05-23 19:10:29 +08:00
2026-05-23 19:10:29 +08:00
2026-07-21 11:45:30 +08:00
2026-05-26 13:04:38 +08:00
2026-05-23 19:10:29 +08:00
2026-05-23 19:10:29 +08:00
2026-07-21 11:19:08 +08:00
2026-07-31 11:13:49 +08:00
2026-05-23 19:10:29 +08:00
2026-07-31 11:13:49 +08:00
2026-05-23 19:10:29 +08:00
2026-07-30 16:45:51 +08:00
2026-05-23 19:10:29 +08:00
2026-07-30 13:00:28 +08:00
2026-07-24 14:55:17 +08:00
2026-05-23 19:10:29 +08:00
2026-05-23 19:10:29 +08:00
2026-07-21 11:35:39 +08:00
2026-05-26 13:04:38 +08:00
2026-07-30 13:50:34 +08:00
2026-07-24 14:55:17 +08:00
2026-05-23 19:10:29 +08:00
2026-05-23 19:10:29 +08:00
2026-07-24 15:12:41 +08:00
2026-05-23 19:10:29 +08:00
2026-07-21 11:32:20 +08:00
2026-05-26 13:04:38 +08:00
2026-05-23 19:10:29 +08:00
2026-05-23 19:10:29 +08:00
2026-07-21 11:35:39 +08:00
2026-05-26 13:04:38 +08:00
2026-05-23 19:10:29 +08:00
2026-05-23 19:10:29 +08:00
2026-07-21 11:23:11 +08:00
2026-05-26 13:04:38 +08:00
2026-07-28 11:04:18 +08:00
2026-07-27 13:38:05 +08:00