Commit Graph
381 Commits
Author SHA1 Message Date
joywayer 79829cc629 场景改动 2026-07-21 12:05:04 +08:00
joywayer 447575d66e docs(enemy): 更新迁移后能力脚本残留旧字段名注释为 _cfg.* 2026-07-21 11:45:30 +08:00
joywayer 8bd24df11e feat(wizard): 敌人能力 SO 按能力类型创建正确子类(向导批量创建产出子类 SO) 2026-07-21 11:40:44 +08:00
joywayer 6d071e83ae refactor(enemy): Appear/FacePlayer/PlayClip 参数迁入各自子类 SO 2026-07-21 11:35:39 +08:00
joywayer 78c8c6dcd6 refactor(enemy): MeleeVulnerability 参数迁入 MeleeVulnerabilityAbilitySO(子类) 2026-07-21 11:32:20 +08:00
joywayer 34772c3d20 refactor(enemy): AnimatedCeilingDrop 参数迁入 AnimatedCeilingDropAbilitySO(子类) 2026-07-21 11:29:20 +08:00
joywayer 16b0d7b819 refactor(enemy): CeilingHangStrike 参数迁入 CeilingHangStrikeAbilitySO(子类) 2026-07-21 11:26:03 +08:00
joywayer 1e3b01705f refactor(enemy): RepeatSlam 参数迁入 RepeatSlamAbilitySO(子类) 2026-07-21 11:23:11 +08:00
joywayer 6873a2cd8e refactor(enemy): ContactChase 参数迁入 ContactChaseAbilitySO(子类) 2026-07-21 11:19:08 +08:00
joywayer ca36974ec3 feat(enemy): EnemyAbilityBase 加 ResolveConfig<T> 类型化配置解析(不匹配显式报错) + EditMode 测试 2026-07-21 11:14:28 +08:00
joywayer 0ad4acc484 docs(plan): 敌人能力配置迁移到 AbilitySO 子类实现计划 2026-07-21 11:04:36 +08:00
joywayer 68e2cc506d docs(spec): 敌人能力配置迁移到 AbilitySO 子类设计文档 2026-07-21 10:42:25 +08:00
joywayer a7307a5a07 调整文档 2026-07-21 10:22:43 +08:00
joywayer 2d4b3cfd96 feat(wizard): 敌人/Boss 加默认外观 Sprite 字段并透传给脚手架(碰撞体尺寸依据) 2026-07-20 16:42:13 +08:00
joywayer 3af4e4140b refactor(scaffold): ChaoFeng + 通用 Place 统一 Box HurtBox/接触伤害区 + sprite 尺寸 2026-07-20 16:35:25 +08:00
joywayer 4fcbc73d44 refactor(scaffold): E002-E006 统一 Box HurtBox/接触伤害区 + sprite 尺寸(补全缺失的接触伤害区) 2026-07-20 16:24:03 +08:00
joywayer 8efd5e2207 refactor(scaffold): E001 用统一助手建 Box HurtBox/接触伤害区 + sprite 尺寸参数 2026-07-20 16:11:18 +08:00
joywayer 3124b2bba2 feat(scaffold): 新增 SpriteSizeOr / SetupHurtAndContactBoxes 助手(Box 统一 HurtBox/接触伤害区) 2026-07-20 16:01:15 +08:00
joywayer ee0bc6948d @
docs(scaffold): 敌人碰撞体 Sprite 驱动+统一 Box+全员接触伤害区 实施计划

Task1 助手(SpriteSizeOr/SetupHurtAndContactBoxes)/Task2 E001 样板/Task3 E002-E006/
Task4 ChaoFeng+通用/Task5 向导 sprite 字段/Task6 端到端验证。只改脚手架+向导。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 15:51:35 +08:00
joywayer 82d5212dfd @
docs(scaffold): 敌人碰撞体 Sprite 驱动 + 统一 Box + 全员接触伤害区 设计文档

脚手架生成的敌人(含 Boss):主体/HurtBox/ContactDamageZone 三者统一 BoxCollider2D、
同尺寸、底部对齐 y=0;尺寸由向导默认 Sprite 的包围盒推导(留空回退硬编码);每个
敌人都有 ContactDamageZone。只改脚手架+向导,不动现有 prefab。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 15:46:52 +08:00
joywayer b8360ec426 @
fix(scaffold): 兜底把 HurtBox/接触伤害节点所有碰撞体设为 trigger

脚手架原本只对自己创建的具体类型(Capsule/Circle)设 isTrigger=true;若碰撞体被
手动换成别的类型(如 BoxCollider2D,默认 isTrigger=false),那条就漏掉——E001 的
HurtBox/ContactDamageZone 被换成 Box 后 isTrigger 掉回 false,导致受击/接触伤害
的 trigger 判定失效。

新增 EnsureCollidersAreTriggers 助手,对节点全部 Collider2D 兜底设 trigger;
PlaceE001 的 HurtBox 与 ContactDamageZone 建好后调用。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 14:50:00 +08:00
joywayer d7be0cc119 @
feat(ai): 追击冲刺带冷却——CD 期巡逻,冷却结束仍在追逐区则再冲(PatrolBetweenChases)

按需求:冲刺打完 → CD 期切到巡逻(Move_Patrol) → 冷却结束且玩家仍在追逐区 → 再冲刺。

PerceptionStateMachine 加 opt-in 开关 PatrolBetweenChases:
- Chase → Patrol When !IsAbilityRunning(chase):冲刺是 committed 冲锋,感知丢失
  也不中途打断,打完(能力结束)即降巡逻。
- Idle/Patrol/Alert → Chase 加冷却门 CanUseAbility(chase):CD 中不回追击,
  避免"CD 期在追逐区每帧 Chase↔Patrol 来回抖"(用户担心的错切/抖动)。
- 默认关:不影响其他敌人(leftAllZones 旧行为保留)。
E001CaoZhiAi 打开开关。追击能力保持单次冲刺不变,冷却=ABL_E001_Chase.cooldown(1s)。

测试:PerceptionStateMachineTests +5(CD 转换矩阵含"CD 期多帧不抖动"负例),
FakeCombat 加可控 CanUse。全量 75/75 绿。PlayMode 实测循环
Move_Patrol(CD)→Chase(冲)→Move_Patrol,inChase 全程 true 亦不抖,0 报错。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 13:11:28 +08:00
joywayer 1a15473966 @
fix(enemy): 转身中不再静默丢弃新朝向请求,修"冲刺方向与朝向相反"

UpdateFacing 原 `if (_isTurning) return` 会把转身进行中的新朝向请求静默丢弃。
当敌人在平台边缘触发 Pace 翻转(开始 Flip 转身)同时进入追击时,追击的
FaceDirection(朝玩家)被丢弃,旧的巡逻转身完成后朝向定格在与玩家相反方向
→ 冲刺朝玩家方向移动、脸却朝相反(并连带"冲刺中途转身""提前停"两个衍生现象)。

改为:转身中收到不同方向请求时重定向(停旧转身按新方向重起),同向则忽略。
根因修复,惠及 Pace/追击/FaceTarget 所有调用方。

systematic-debugging 确定性复现证实:修复前 AFTER-TURN dir=+1 facing=-1;
修复后开阔地冲刺全程 dir=1 facing=1、冲满 6 米到真实平台边缘才停。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 13:03:29 +08:00
joywayer 55b6255ce6 @
test(ai): BrainGraph 全面测试——框架边界 + 全感知矩阵(70 tests 全绿)

保证自研 AI 状态机(BrainGraph)稳定与功能正确性。EditMode AI 测试从 31 增至 70。

新增 AiFrameworkTests(17)——框架健壮性/边界(与 AiRuntimeTests 主干互补):
- 构图校验:Entry 未设/未声明、全局转换目标未声明、GlobalBuilder 顺序错用抛异常
- 转换优先级:同态多条件首声明胜、全局条件转换、全局优先于局部
- 事件 vs 条件:事件优先(Tick 首步)、未匹配信号被消费不阻塞、多信号首个匹配胜
- 时序:条件自转换 no-op、转换当帧跳过 OnTick、Tick 双参传 dt
- trace 环形上限 16、事件推进后清挂起、State 重声明累加转换

重写 PerceptionStateMachineTests(22)——完整感知↔状态矩阵:
- 待机/巡逻/警觉/追击/死亡 全转换 + HasAlert 分支(无警觉态不进警觉)
- 追击优先于警觉;追击永不回警觉、脱离全部感知才降级 R(=Patrol)
- 视野单独/追逐区单独仍维持追击;locomotion 意图(Idle/Patrol/Face)
- 追击触发能力、离开中断能力;死亡为终态不复活

验证:反射调用全部 [Test] 方法(负对照确认能捕获失败),70/70 通过。
去重:Blackboard/局部转换目标校验已由 BlackboardTests/BrainBuilderTests 覆盖,不重复。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 11:11:54 +08:00
joywayer 61ca84365d @
feat(scaffold): ChaoFeng(Boss) 撞墙检测层默认 Platform+Wall

补齐 Boss——脚手架 PlaceChaoFeng 加 _wallMask=Platform+Wall;prefab 同步直接设值
(原 Nothing,_wallCheckDist=0.2>0 会触发 Awake 撞墙未配报错)。至此 E001-E006+
ChaoFeng 全部配好 _wallMask。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 10:49:39 +08:00
joywayer ba4a07e96d @
feat(scaffold): E002-E006 撞墙检测层默认 Platform+Wall

把 E001 已有的 _wallMask 默认铺到 E002-E006 脚手架 PlaceExxx(AssignLayerMask
movement _wallMask = Platform+Wall);现有 5 个 prefab 的 EnemyMovement._wallMask
同步直接设值(原 Nothing,且 _wallCheckDist=0.2>0 会触发 Awake 撞墙未配报错)。

ChaoFeng(Boss)按用户范围未含,其 _wallMask 仍需单独配置(否则 Awake 报错提醒)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 10:44:41 +08:00
joywayer bd8e0a4f16 @
refactor(enemy): _wallMask 未配显式报错,不再静默回退地面层

按 CLAUDE.md §6:删除"_wallMask 为空则回退 _groundMask"的下游兜底(掩盖漏配)。
改为:WouldHitWallAhead/WallAndLedgeCheck 直接用 _wallMask;Awake 校验——启用
墙检测(_wallCheckDist>0)却 _wallMask=Nothing 时 Debug.LogError 提醒策划配置
(推荐 Platform+Wall)。

PlayMode 验证:E001(已配 Platform+Wall)无报错、撞墙检测正常;临时配错的敌人
(wallMask=Nothing) Awake 即报明确错误。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 10:36:11 +08:00
joywayer 902afbca1c 修改资源 2026-07-20 10:33:18 +08:00
joywayer 88fca8f9b0 @
fix(enemy): 撞墙检测层默认 Platform+Wall(策划可配) + 修 Physics2D 层矩阵落盘

- EnemyMovement._wallMask:本就 [SerializeField] 暴露在 Inspector,补 Tooltip
  说明为策划可配的撞墙检测层(巡逻翻边/追击冲刺共用,按碰撞体前缘);脚手架
  PlaceE001 默认赋 Platform+Wall,prefab 同步。原先 Nothing→回退 groundMask,
  漏检 Wall 层墙;现显式含 Wall。回退逻辑保留作未配置兜底。
- Physics2DLayerReport.SavePhysicsSettings:原实现(AssetDatabase.SaveAssets+
  改 defaultContactOffset)不落盘层矩阵——实测 Physics2D.IgnoreLayerCollision 的
  改动 SaveToSerializedFileAndForget(单例) 也捕获不到;改用 File/Save Project
  (实测 hash 变化确认落盘,且不触动打开场景)。Auto Fix 的矩阵修正现能立即持久化。

(说明:Enemy×Player 碰撞矩阵与报告 ExpectedPairs 此前已正确=忽略,无需改动;
地图障碍物层管理/冲刺可穿透障碍另行整体规划。)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 10:32:07 +08:00
joywayer db55889088 @
feat(enemy): 追击起手前先转身朝玩家(播 Flip) + 冲刺速度可配置

- ContactChaseAbility:进入追击先 FaceDirection 朝玩家,若背对则播 Flip 转身、
  等 IsTurning 结束后再 Skill_Start(张口)→冲刺;已朝向玩家则跳过转身直接张口。
- 新增 _dashSpeed 字段(<=0 回退 Stats.RunSpeed),冲刺速度可在能力 Inspector 配置。
- E001 EnemyMovement._enableTurnAnimation=true(prefab+脚手架),转向播 AnimConfig.Turn
  (Flip),用于巡逻翻边与追击起手前转身;脚手架 PlaceE001 同步。

PlayMode 验证(brain 关隔离):背对玩家→触发追击→clip=Flip(IsTurning)→转向完成
facing 朝玩家→Skill_Start→冲刺→Skill_End,"先转身再张口"成立。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-10 16:57:41 +08:00
joywayer 9eca69a6ba @
feat(enemy): E001 追击改为冲刺+冷却(朝玩家方向冲,撞墙/边缘停,CD后再冲)

按新设计:进入追击→Skill_Start(张口)→起手后按玩家所在侧一次性确定方向→
速度直冲(非 nav,接触伤害开)→撞墙/到平台边缘(WouldBlockAhead)或受阻即停→
Skill_End(收招)→进入冷却(ABL_E001_Chase.cooldown=1s)。一次冲刺=一次能力执行,
AI 追击态在冷却结束时经 EnsureAbility 重触发下一次冲刺。

- ContactChaseAbility:无限跟随改为有限冲刺;方向 committed(会越过跳开的玩家,
  可被躲);加窗口净位移卡死兜底——撞上未在检测层的碰撞体(玩家/边界墙)原地不动
  时结束冲刺转收招+冷却,避免卡死。
- ABL_E001_Chase.cooldown 0→1(可在 SO 调)。

PlayMode 验证(净域重载后):Skill_Start→冲刺(实测冲 7 单位、伤害开)→受阻→
Skill_End→冷却→冷却结束重新起手冲刺,完整循环。速度直冲不依赖 nav,敌人实际
位移正常。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-10 16:46:37 +08:00
joywayer 36aa2006e4 @
feat(enemy): E001 追击动画 Skill_Start/Loop/End 完整化,符合设计文档

依据 Docs/Game/Design/小怪设计-程序开发文档-01.md:感知→Skill_Start(张口,单次)
→Skill_Loop(快速爬行追击,循环)→丢失目标→Skill_End(收招,单次)→Move_Patrol,
E001 无警觉态。

原问题:ContactChaseAbility 的 loop/end clip 都空、无 start clip,追击全程无
动画;Approach 步态还错播 Move;有多余警觉态(Alert clip 也空)。

- ContactChaseAbility:加 _startClip;协程 Skill_Start(锁动画+等时长,不伤人)→
  开伤害+Approach+Skill_Loop(循环)→退出播 Skill_End。丢失目标(ExternalRequest
  中断)播 Skill_End;受击/死亡硬打断不播。
- EnemyBase:加动画锁 LockAnim/IsAnimLocked——一次性招式动画期间步态不覆盖;
  PlayLocomotionClip 的 Approach 改为不驱动步态(追击动画归能力)。
- EnemyLocomotion:锁定期不算"已应用",解锁后重同步步态(避免卡在 Skill_End)。
- ENM_E001_Stats:HasAlertState=false(设计无警觉态)。
- prefab + 脚手架:ContactChaseAbility 接线 Skill_Start/Loop/End;新增
  AssignClipTransition 助手(按名+路径定位同名 clip)。

PlayMode 验证:Skill_Start(locked/不伤人)→Skill_Loop(伤害开)→Skill_End
(locked)→步态恢复 Move,全链符合设计。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-10 16:27:02 +08:00
joywayer f1ca62f881 @
feat(enemy): 追击(nav)也夹紧悬崖边缘——碰撞体前缘不越地形边缘

MoveWithSpeed(导航跟段驱动追击)原先无边缘夹紧,仅靠 nav 图,agent 按点定位
可让碰撞体前缘越出段/地形边缘约半个碰撞体宽。现加"悬崖"夹紧(WouldFallAhead,
按碰撞体前缘即时判定),贴地生效:追击时碰撞体边缘停在地形边缘、不越界,与 Pace
一致。只夹悬崖不夹墙(墙交寻路绕行,免误夹停);跨沟的 nav-link 跳/落不经
MoveWithSpeed(仅 IsMovingOnSegment 时写速度),故不影响跳跃/下落过沟。

WouldBlockAhead 拆为 WouldHitWallAhead / WouldFallAhead 复用;PlayMode 校验
拆分正确(前缘朝悬崖侧 WouldFall=True)、Pace 不回归。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-10 15:48:58 +08:00
joywayer a4b9729de7 @
fix(enemy): 巡逻边缘不越界 + 卡死兜底 + Locomotion 惰性发现

- WouldBlockAhead(EnemyMovement):按请求方向从碰撞体前缘(bounds.max/min.x)
  即时射线判墙/悬崖,天然考虑碰撞体宽度;MoveHorizontal 据此夹紧前进,保证
  "碰撞体边缘停在地形边缘、不越界"。移动层夹紧与 Pace 翻向共用同一判定,
  避免"夹停却不掉头"。nav 走 MoveWithSpeed 不受影响。
- Pace 加窗口净位移卡死兜底:撞上未挂检测层的墙/卡角(含贴墙微抖)也能翻向,
  用净位移而非逐帧差以免微抖重置计数。
- EnemyBase.Locomotion 改惰性发现:关域重载下 Awake 设的实例字段可能残留
  为 null,首次访问按需补发现,编辑器/构建都不为空(此前致入口态偶发 NRE)。

PlayMode(跨调用取样,避免 Thread.Sleep 冻结主线程)验证:Pace 来回踱步、
遇边缘/墙掉头、碰撞体不越界。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-10 15:12:28 +08:00
joywayer 6f52e4ff81 @
fix(enemy): Pace 巡逻改边沿触发翻向,修边缘左右抖动

TickPatrol 跑在 Update(可变帧率),IsWallAhead/IsLedgeAhead 在 FixedUpdate
刷新。原电平触发(每帧 blocked 就翻向)会在检测刷新前的多个 Update 帧把同一
障碍连翻多次→掉头边缘左右抖动几次才正常。改为边沿触发(仅障碍首次出现时翻
一次),用 _paceBlockedPrev 记录上帧状态。PlayMode 验证:踱步移动正常、无
连续快速翻转。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-10 14:36:53 +08:00
joywayerandClaude Opus 4.8 6a34b42db0 fix(enemy): 终审修复——删死代码群体警戒、修 Waypoints 到达推进、补 Locomotion 缺失报错
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 14:05:56 +08:00
joywayerandClaude Opus 4.8 c43ca8e8b6 feat(enemy): EnemyLocomotion 巡逻策略 Pace(踱步) + Waypoints(路点 loop/ping-pong)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 13:47:14 +08:00
joywayerandClaude Opus 4.8 f7554b1a65 refactor(enemy): 删除 EnemyStatsSO 死字段(感知/击退/攻击等,已迁 sensor槽/DamageSourceSO)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 13:43:51 +08:00
joywayerandClaude Opus 4.8 d718b99685 refactor(enemy): 删除 AiPhase 影子层,动画统一由 locomotion/反应态/能力驱动
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 13:38:27 +08:00
joywayerandClaude Opus 4.8 347d0e2f50 feat(enemy): EnemyLocomotion 按模式驱动步态动画(Idle/Walk/Alert/Run)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 13:33:16 +08:00
joywayer 087aa96ca6 @
fix(ai): EnemyAiBrain 在 Start 构造 runtime,修入口态 locomotion NRE

入口状态 OnEnter 会声明 locomotion 意图(x.Locomotion.SetMode),但原在 Awake
构造 AiRuntime 时 EnterInitial 立即触发该 OnEnter——此时 EnemyBase.Awake 可能
尚未发现 _locomotion(两组件 Awake 顺序未定),导致 x.Locomotion 为 null 抛 NRE,
brain 未建成 runtime。改在 Start 构造(所有 Awake 先于任一 Start),保证依赖就绪。
根因修复,非 null 兜底。P3 PlayMode 验证发现。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-10 13:30:46 +08:00
joywayerandClaude Opus 4.8 95e562943b refactor(scaffold): 重生成 E001 prefab(去三协程能力节点,仅留 ContactChase+Locomotion)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 13:23:09 +08:00
joywayerandClaude Opus 4.8 1bc6f5bf1c refactor(ai): Chase 走 Locomotion.Approach;删除 Idle/Patrol/Alert 协程能力与 SO
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 12:24:45 +08:00
joywayer 63b3701fc7 @
test(ai): PerceptionStateMachine locomotion 意图回归测试(绿)

新增 PerceptionStateMachineTests:待机态声明 Idle locomotion 意图、进追逐区
转 Chase 并触发追击能力、Chase 态不再直接声明 locomotion 意图。测试程序集
补 BaseGames.Enemies 引用。断言经真实状态机 + 测试 fake 验证通过。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-10 12:21:28 +08:00
joywayerandClaude Opus 4.8 0f0112eb91 refactor(ai): PerceptionStateMachine 状态改绑 locomotion 意图
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 12:17:49 +08:00
joywayerandClaude Opus 4.8 1ab0521061 refactor(ai): IAiContext.Mover→Locomotion,删除 IMover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 12:14:53 +08:00
joywayerandClaude Opus 4.8 f143efe4a3 feat(scaffold): PlaceE001 挂载 EnemyLocomotion,重生成 prefab
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 12:10:29 +08:00
joywayerandClaude Opus 4.8 8c1a8647bb feat(enemy): EnemyBase 经接口发现并暴露 Locomotion(IEnemyLocomotion)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 12:06:41 +08:00
joywayerandClaude Opus 4.8 0f988c4cef feat(enemy): 新增 EnemyLocomotion 执行器(Idle/Patrol-Wander/Face/Approach)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 11:59:02 +08:00
joywayerandClaude Opus 4.8 0a7312e9bc feat(ai): 新增 IEnemyLocomotion 接口与 LocomotionMode/PatrolStrategy 枚举
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 11:55:41 +08:00