 joywayerandClaude Opus 5
|
5dcbce6019
|
docs(enemy): 计划新增 T5b——BrainBuilder.DeclareState 防模块间状态名冲突
契约质量审查提出:模块化后 State() 的"有则取"语义使两个独立模块
取同名状态时后者静默覆盖前者回调。与 T1 的 RequireState 是同一类
失败的两面,趁 0 个模块实现时补代价最低。附带补充交战/死亡层
"为何单阶段 Build 足够"的不变量说明。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 11:57:57 +08:00 |
|
joywayer
|
17e71dac39
|
feat(enemy): 未发现层/交战层/死亡层三个模块契约
|
2026-07-29 11:47:29 +08:00 |
|
 joywayerandClaude Opus 5
|
2643f58b08
|
docs(enemy): 计划同步——AiStateFragments 空能力 id 改建图期报错
原稿沿用旧代码的静默跳过写法。AiStateFragments 成为公开原语后,
定制 AiScript 漏配 id 会产出"存在但什么都不做"的状态且无报错,
与 T1 引入 BrainBuilder.RequireState 的理由是同一类失败,不应双标。
校验放建图期而非每帧回调,兼顾快速失败与热路径开销。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 11:43:15 +08:00 |
|
joywayer
|
68f615e9c1
|
fix(enemy): AiStateFragments 空能力 id 建图期报错,补 OnExit 收尾测试
Ability/AbilityOnce 建图期校验 abilityId 非空,与 BrainBuilder.RequireState
同一类"漏配即快速失败"约束保持一致,避免定制 AiScript 漏配 id 时产出静默
不作为的状态。同时补 4 个测试:Locomotion/Ability 的 OnExit 收尾行为,以及
两个原语对空 id 的报错行为。
|
2026-07-29 11:42:47 +08:00 |
|
joywayer
|
77a32cbf8a
|
feat(enemy): AiStateFragments 建态原语,新增 AbilityOnce 修死亡态重触发隐患
从 PerceptionStateMachine 的 private static 辅助方法提升为公开原语,供后续
模块化重构(骨架+可插拔模块)与定制 AiScript 复用。新增 AbilityOnce:
只在进入时触发能力、不每帧重触发,修复用 Ability() 驱动死亡态时演出播完
被 Tick 无限重播的隐患(现有 PerceptionStateMachine 因 E001 死亡能力 id
为空未暴露,本次不改它,留待 T11 整体退役)。
|
2026-07-29 11:35:47 +08:00 |
|
joywayer
|
084354fa6c
|
test(enemy): AbilityRef 补测资产已挂但 abilityId 为空的误配路径
|
2026-07-29 11:29:47 +08:00 |
|
joywayer
|
474e89de3a
|
feat(enemy): AbilityRef——AI 层能力引用资产化,字符串仅作定制脚本兜底
|
2026-07-29 11:22:15 +08:00 |
|
joywayer
|
fd238b71f1
|
refactor(ai): AiSignal 8→1,删除零发送方零消费方的死枚举
|
2026-07-29 11:14:29 +08:00 |
|
joywayer
|
e76d6bc118
|
feat(ai): BrainBuilder.RequireState——未声明状态挂边时构建期报错
|
2026-07-29 11:08:23 +08:00 |
|
 joywayerandClaude Opus 5
|
8d63525b12
|
chore(scene): TestRoomA 敌人感知槽改 Box 型并配尺寸,微调物体位置
aggro/los 两个感知槽由点/圆改为 Box(type 7),offset y=0.31,
分别配 8.1x1.38 / 11.65x1.38;顺带清掉随 NavDriving 死代码移除的序列化残留字段。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 11:05:15 +08:00 |
|
 joywayerandClaude Opus 5
|
f3c17de223
|
docs(enemy): 敌人 AI 组合式模块架构实施计划(17 个任务,TDD)
含计划阶段发现的三处修正:
- 未发现层拆 Declare/Link 两阶段,保证骨架升级边优先于内部计时边;
- 模块参数校验与委托缓存移出构造函数([SerializeReference] 不保证走 ctor);
- 新增 AiStateFragments.AbilityOnce,修死亡态演出被 Tick 无限重播的隐患。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 10:51:07 +08:00 |
|
 joywayerandClaude Opus 5
|
e59e24cca0
|
docs(enemy): 修正 AI 配方解析方式——直接引用替代注册表双源
实施计划阶段发现两处硬阻塞:
1. BaseGames.AI 只引用 BaseGames.Core,无法收集依赖 Enemies 的 AiRecipeSO;
2. 项目 database SO 走 [SerializeField] 直接引用而非 Addressables,静态注册表取不到。
改为 EnemyAiBrain 上 _recipe 资产引用 / _definitionId 脚本 id 二选一。
净减 AiRecipeDatabaseSO、Addressables 加载、AddressKeys 改动、asmdef 改动;
flyweight 与配方路径零字符串 id 均保持。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 10:38:07 +08:00 |
|
 joywayerandClaude Opus 5
|
1c32d8c87e
|
docs(enemy): 敌人 AI 组合式模块架构设计(替换 PerceptionStateMachine)
四层架构:固定感知骨架 + 可插拔的 未发现层/交战层/死亡层;
两种定义源:PerceptionRecipeSO 配方资产(约 95% 敌人零代码)+ AiScript 定制脚本;
消除 Config 开关面板(EngagementStyle/PatrolBetweenChases → RushExit 语义枚举);
能力引用资产化(AbilityRef);AiSignal 8→1 清理死枚举。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-29 10:20:22 +08:00 |
|
joywayer
|
c4e80afe9e
|
chore(enemy): 清除随寻路库失效的 NavDriving 死代码与两处过时注释
NavDriving 原由已删除的寻路适配层设置,现无人写入(全项目 C# 零引用),
连同其调试字段一并移除;场景/预制体里的序列化残值由 Unity 下次保存自动丢弃。
|
2026-07-28 13:28:52 +08:00 |
|
 joywayerandClaude Opus 5
|
d46ba67385
|
merge: 移除第三方 2D 寻路库,敌人导航改为直接移动方案
核心洞察:可达性由 EnemyMovement 的墙/悬崖夹紧天然表达——走过去、被夹停就是边界,
无需重建任何图/段结构。'agent 脱离导航段导致寻路全面静默失效'这一整类问题随之消失。
- IPathAgent(20+成员) → IEnemyNavigator(7成员);GroundNavigator/FlyingNavigator/NullEnemyNavigator
- 三处重复的卡死检测收敛为 StallDetector;修复 Pace 持续受阻无法掉头的死锁
- 修复 Wander 挑点失败退化为永久播 Idle 的缺陷
- 删除寻路库整包(112脚本/21069行)及对其源码的 4 处项目改动
- 脚手架/编辑器面板/Boss 预制体同步清理
净变化:删约 21500 行,加约 350 行。
验证:编译 0 错误;EditMode 206/206;PlayMode 无寻路库环境下三种巡逻+追击实测通过。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-28 13:20:05 +08:00 |
|
joywayer
|
a220b5c0d8
|
删除多余
|
2026-07-28 13:18:41 +08:00 |
|
joywayer
|
02ea0bb576
|
docs(enemy): 标注脱图脱困设计已作废(被移除寻路库方案取代,未实施)
|
2026-07-28 13:03:54 +08:00 |
|
joywayer
|
878e2c12cc
|
chore(enemy): Boss 预制体移除随寻路库失效的 3 个导航组件(Boss 本就不使用导航)
|
2026-07-28 13:02:52 +08:00 |
|
joywayer
|
7934513b05
|
chore: 删除第三方 2D 寻路库整包(112 脚本/21069 行,含 4 处对其源码的项目改动)
敌人导航已改为 GroundNavigator/FlyingNavigator 直接移动方案:
可达性由 EnemyMovement 的墙/悬崖夹紧天然决定,不再需要烘焙导航图,
'agent 脱离导航段导致寻路全面静默失效'这一整类问题随之消失。
|
2026-07-28 11:50:33 +08:00 |
|
joywayer
|
3c622a69f2
|
refactor(enemy): NavLinkType 迁入 INavLinkHandler 并改述为能力驱动的地形穿越;补交新脚本 .meta
|
2026-07-28 11:50:17 +08:00 |
|
joywayer
|
4455062ee9
|
refactor(editor): 脚手架改用 GroundNavigator,移除寻路库引用与导航面放置工具
|
2026-07-28 11:45:24 +08:00 |
|
joywayer
|
219fe46719
|
fix(enemy): GroundNavigator 停止改为直写移动输入,消除与 EnemyBase.StopMovement 的无限递归(栈溢出)
|
2026-07-28 11:39:25 +08:00 |
|
joywayer
|
de3c9deff4
|
refactor(enemy): 消费者切换到 IEnemyNavigator(Wander/Waypoints 去导航图化,调试面板简化)
|
2026-07-28 11:25:21 +08:00 |
|
joywayer
|
49627d357d
|
refactor(enemy): FlyingDirectNavigator 改名 FlyingNavigator 并切换到 IEnemyNavigator
|
2026-07-28 11:17:34 +08:00 |
|
joywayer
|
c041712e99
|
fix(test): 到达边界用例改用二进制可精确表示的值(1.25/0.25),避免浮点噪声误判
|
2026-07-28 11:15:16 +08:00 |
|
joywayer
|
668bc3500e
|
feat(enemy): 新增 GroundNavigator 地面直接移动导航(+7 纯函数单测)
补充 EditMode 测试程序集对 BaseGames.Enemies.Navigation 的引用(此前缺失,新测试无法编译)
|
2026-07-28 11:12:11 +08:00 |
|
joywayer
|
2174e42ce0
|
feat(enemy): 新增 IEnemyNavigator 瘦身导航接口(7 成员)与 NullEnemyNavigator
|
2026-07-28 11:07:53 +08:00 |
|
joywayer
|
8ea919a7f1
|
chore(enemy): 补交 StallDetector 与其测试的 .meta
|
2026-07-28 11:07:06 +08:00 |
|
joywayer
|
c929b5efb7
|
refactor(enemy): 三处卡死检测收敛为 StallDetector;修复 Pace 持续受阻时无法掉头的死锁
|
2026-07-28 11:04:18 +08:00 |
|
joywayer
|
5cfacf199a
|
feat(enemy): 新增 StallDetector 推进停滞检测(+8 单测),为收敛三处重复实现做准备
|
2026-07-28 11:01:01 +08:00 |
|
joywayer
|
d9ec0a4f6e
|
docs(enemy): 移除寻路库实现计划(10任务/6阶段,TDD+编译门+回归门+PlayMode验收)
|
2026-07-28 10:53:21 +08:00 |
|
joywayer
|
d74a2b6646
|
docs(enemy): 移除寻路库后的敌人导航框架设计(IEnemyNavigator 瘦身+地面直移+StallDetector 收敛)
|
2026-07-28 10:41:30 +08:00 |
|
joywayer
|
579499e678
|
docs(enemy): 脱困改用敌人自身步速(MoveHorizontal/WalkSpeed),移除独立速度参数
|
2026-07-27 16:45:00 +08:00 |
|
joywayer
|
e7f1633877
|
docs(enemy): 导航脱图统一脱困设计(含 Wander/Waypoints 静默吞失败与 Pace 边沿翻向两个根因)
|
2026-07-27 16:31:32 +08:00 |
|
joywayer
|
28cd335f40
|
chore(enemy): [临时调试] E001 出生即巡逻,用于真机验证中心悬空导致导航失效的问题
代码处已留 [临时调试] 标记,验证结束后改回 Entry=Idle_Disguise。
|
2026-07-27 16:01:03 +08:00 |
|
joywayer
|
47c2ce7e99
|
fix(enemy): 冲锋禁止以中心悬空姿态收尾(会导致导航映射失败/巡逻失效)
新增 EnemyMovement.IsCenterOverGround() 与 RushAbility.SettleRoutine:
冲锋结束时若着地却中心悬在崖外,继续朝原方向推进直到离地(自由落体)或中心重回地面上方;
有时限,超时仍未脱离则告警暴露地形问题(崖沿有墙),不静默留下坏站位。
|
2026-07-27 15:50:01 +08:00 |
|
joywayer
|
80c0e5c277
|
revert(enemy): E001 初始态改回 Idle_Disguise(伪装静止),移除临时调试改动
|
2026-07-27 15:27:15 +08:00 |
|
joywayer
|
e2645b6212
|
fix(editor): 脚手架提示改为 BrainGraph 指引,清除已废弃的 BehaviorTree/BossSkillSequencer 说法
|
2026-07-27 15:09:47 +08:00 |
|
 joywayerandClaude Opus 5
|
bcc4292076
|
merge: 冲锋能力(RushAbility) — 锁定终点+可冲下悬崖
ContactChaseAbility → RushAbility(文件与类改名,GUID 保留,引用不断):
- 起手动画前锁定玩家 X 与方向(committed 冲锋,可被躲)
- 终点=身体整体越过锁定点(EnemyBase.Body.HasPassed),宽度取自身体几何权威
- 终止:越过锁定点/撞墙(只判墙)/maxDashDuration 超时/净位移卡死
- 冲锋期间经 EnemyMoveInput.AllowLedgeCross 放开悬崖夹紧,可冲下崖不悬停边缘
- 脚手架(SceneObjectPlacerTool/CharacterWizardWindow)同步更新
验证: 编译 0 错误; EditMode 191/191; PlayMode 实测越过锁定点/撞墙终止/
崖边夹紧对比(false=0,true=9)/端到端冲下悬崖并落地。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-27 13:45:13 +08:00 |
|
joywayer
|
4808077fc6
|
feat(enemy): ContactChaseAbility 改造为 RushAbility(冲锋)
- 起手前锁定玩家 X 与方向(committed),终点改为身体整体越过锁定点(Body.HasPassed)
- 终止条件:越过锁定点/撞墙(只判墙)/最大冲刺时长(SO 新增 maxDashDuration)/净位移卡死
- 冲锋期间经 EnemyMoveInput.AllowLedgeCross 放开悬崖夹紧,可冲下崖不悬停边缘
- 类与文件重命名(GUID 保留),脚手架与向导同步更新
|
2026-07-27 13:38:05 +08:00 |
|
joywayer
|
7cba58919f
|
feat(editor): 敌人/Boss 放置脚手架绑定 EnemyBase._bodyCollider(身体几何唯一权威)
|
2026-07-27 13:17:38 +08:00 |
|
 joywayerandClaude Opus 5
|
33a52c4531
|
merge: 角色身体碰撞体唯一权威源(IEnemyBody)
EnemyBase 持有 _bodyCollider 并暴露 Body;EnemyMovement 5 处探测与 EdgeSafeMargin
改走权威,删除重复 4 次的碰撞体解析与 GroundColliderOrSelf;
行为等价(两个敌人原本即回落到根碰撞体),EditMode 191/191 + PlayMode 崖边夹紧验证通过。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-27 12:13:10 +08:00 |
|
joywayer
|
9f8d4f21ca
|
fix(enemy): EnemyMovement 加 RequireComponent(EnemyBase),固化身体权威同物体不变量
|
2026-07-27 12:13:10 +08:00 |
|
joywayer
|
b1d3c169ec
|
chore(enemy): 补交 EnemyBody 与其测试的 .meta
|
2026-07-27 12:07:46 +08:00 |
|
joywayer
|
9a61d3e256
|
refactor(enemy): 移动层探测与 EdgeSafeMargin 改走 Body 权威,删除重复的碰撞体解析
|
2026-07-27 11:55:55 +08:00 |
|
joywayer
|
6026911532
|
feat(enemy): EnemyBase 持有身体几何权威(_bodyCollider + Body),Awake/OnValidate 双重校验
|
2026-07-27 11:51:45 +08:00 |
|
joywayer
|
b0e1ebfecc
|
feat(enemy): 新增 IEnemyBody 身体几何权威接口与 EnemyBody 实现(+14 纯函数单测)
|
2026-07-27 11:48:26 +08:00 |
|
joywayer
|
8a6450910e
|
docs(enemy): 身体几何权威源实现计划(4任务,TDD+编译门+191测试门+PlayMode等价性验证)
|
2026-07-27 11:38:34 +08:00 |
|
joywayer
|
3752a9a0e0
|
docs(enemy): 角色身体碰撞体唯一权威源(IEnemyBody)设计
|
2026-07-27 11:20:09 +08:00 |
|
 joywayerandClaude Opus 5
|
d26872aa6a
|
merge: 抽取 WeightedPick 加权随机共享原语(消除四处平行实现)
小怪选招/Boss 选招/战利品掉落统一到 BaseGames.Core.WeightedPick;
删除零调用的 SelectWeightedSkill 死代码,修 LootResolver 权重重复计算;
冷却与 HitBox 时序经评估否决抽取(理由见决策记录)。
EditMode 177/177 通过。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-27 10:01:14 +08:00 |
|
joywayer
|
86e3637d8e
|
chore(core): 补交 WeightedPick 与其测试的 .meta
|
2026-07-27 10:00:59 +08:00 |
|
joywayer
|
cd9acfcde1
|
docs: 共享底座抽取决策记录(WeightedPick 已抽;冷却/HitBox 窗口否决理由;Boss BrainGraph 路线)
|
2026-07-27 10:00:05 +08:00 |
|
joywayer
|
1d5214beea
|
refactor(enemy): Boss 选招与战利品掉落改用 WeightedPick;删除零调用的 SelectWeightedSkill 死代码
|
2026-07-27 09:58:40 +08:00 |
|
joywayer
|
67220b4bbd
|
refactor(enemy): 小怪选招改用 WeightedPick 共享原语(权重缓冲复用,零 GC)
|
2026-07-27 09:55:59 +08:00 |
|
joywayer
|
3d85f65965
|
feat(core): 新增 WeightedPick 加权随机共享原语(+10 单测),为消除四处平行实现做准备
|
2026-07-27 09:54:34 +08:00 |
|
 joywayerandClaude Opus 4.8
|
c3ab961d3b
|
merge: 敌人寻路逼近+攻击选择器(ApproachAttack 交战范式)
寻路逼近(Approach)↔选招攻击(Attack)两态子机,与冲锋(ChaseAbility)并列;
招式自管圆形射程;WeightedRandom/Priority 两选招模式;
EditMode 167/167 + PlayMode 冒烟验证通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-24 15:12:42 +08:00 |
|
joywayer
|
23de5adf75
|
fix(enemy): MeleeAttackAbility 空 clip 走 fallbackDuration(判 clip.Clip 而非 clip),兑现 EnemyAttackSO 契约
|
2026-07-24 15:12:41 +08:00 |
|
joywayer
|
568b6e46c0
|
chore(enemy): 补交新脚本的 .meta(AbilityCategory/AttackSelectionMode/IAttackCandidate/EnemyAttackSelector+测试)
|
2026-07-24 14:55:17 +08:00 |
|
joywayer
|
022e4f18d2
|
fix(enemy): Approach 逼近改用 aggro/视野双刷新的 LastKnown(修 aggro 先命中扑向错误点)+补 Attack 退出测试
|
2026-07-24 12:47:48 +08:00 |
|
joywayer
|
f77ab71555
|
feat(enemy): 攻击能力射程 Gizmo(选中可见)+ category==Attack 的 rangeRadius 自检
|
2026-07-24 12:33:16 +08:00 |
|
joywayer
|
980fe35ae4
|
docs(enemy): PerceptionStateMachine 类注释补充 ApproachAttack 交战风格
|
2026-07-24 12:31:31 +08:00 |
|
joywayer
|
6cdd4ef513
|
feat(enemy): PerceptionStateMachine 增加 ApproachAttack 风格(寻路逼近↔选招攻击)+测试
|
2026-07-24 12:27:59 +08:00 |
|
joywayer
|
297f9d2968
|
feat(enemy): IEnemyLocomotion 增加 Pursue 寻路逼近原语(RunSpeed)
|
2026-07-24 12:23:43 +08:00 |
|
joywayer
|
6fd80cfec9
|
fix(enemy): BuildAttackSelector 表达式上下文全限定 AbilityCategory(消歧义于 Abilities 属性)
|
2026-07-24 12:22:35 +08:00 |
|
joywayer
|
702df35efd
|
feat(enemy): ICombatant 增加 HasEligibleAttack/UseBestAttack + EnemyBase 构建选择器
|
2026-07-24 12:20:54 +08:00 |
|
joywayer
|
04a267b69f
|
feat(enemy): EnemyAttackSelector 选招器(射程+冷却+LOS+着地过滤,两模式选招)+单测
|
2026-07-24 12:15:41 +08:00 |
|
joywayer
|
2cf0d6b1a9
|
feat(enemy): EnemyAbilityBase 实现 IAttackCandidate 契约(自管圆形射程)
|
2026-07-24 11:58:22 +08:00 |
|
joywayer
|
25fae97065
|
feat(enemy): 攻击选招元数据(category/weight/圆形射程)与选招模式入 SO
|
2026-07-24 11:56:07 +08:00 |
|
joywayer
|
f15f0a6876
|
docs(enemy): 寻路逼近+攻击选择器实现计划(9任务,TDD选择器+状态机,编译门+Play验证)
|
2026-07-24 11:50:20 +08:00 |
|
joywayer
|
c33ce55f13
|
docs(enemy): 寻路逼近+攻击选择器设计(感知管交战/招式自管射程/两选招模式)
|
2026-07-24 11:21:35 +08:00 |
|
joywayer
|
4a80a11ab5
|
fix(enemy): 改道到最近可达点时同步防抖记账,避免下次 RequestMoveTo 被误吞
|
2026-07-23 17:22:11 +08:00 |
|
joywayer
|
8e71b1a922
|
feat(enemy): Waypoints 受阻/到达即结算推进,删除对不可达点的无限重发
|
2026-07-23 17:09:06 +08:00 |
|
joywayer
|
49b7adbdae
|
feat(enemy): IPathAgent 增加 LastMoveObstructed/TryGetClosestReachable 契约
|
2026-07-23 17:07:31 +08:00 |
|
joywayer
|
72ed14428c
|
feat(enemy): FlyingDirectNavigator 实现受阻/最近可达点成员(飞行单位恒 false)
|
2026-07-23 17:06:21 +08:00 |
|
joywayer
|
d84e66fcb9
|
fix(nav): 发出新寻路请求时作废上一次最近可达点,避免跨目标读到过期数据
|
2026-07-23 17:05:27 +08:00 |
|
joywayer
|
675e1950af
|
feat(enemy): EnemyNavAgent 卡死检测+统一受阻处理+best-effort 改道到最近可达点
|
2026-07-23 16:56:56 +08:00 |
|
joywayer
|
4079392a79
|
feat(nav): NavAgent 暴露寻路失败时的最近可达点 TryGetClosestReachablePosition
|
2026-07-23 16:52:28 +08:00 |
|
 joywayerandClaude Opus 4.8
|
a60073d92c
|
docs(enemy): 敌人寻路受阻处理实现计划(6任务,编译门+Play验证)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 16:44:12 +08:00 |
|
 joywayerandClaude Opus 4.8
|
04b294734a
|
docs(enemy): 敌人寻路受阻处理设计(Waypoints+MoveTo,含卡死检测与最近可达点)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 16:37:39 +08:00 |
|
joywayer
|
02150836b0
|
场景修改和editor优化
|
2026-07-23 15:54:38 +08:00 |
|
 joywayerandClaude Opus 4.8
|
859d4e9bd6
|
feat(enemy): 感知系统新增 BoxLOS 槽位(横向矩形视野+遮挡)
BoxCast 是纯几何矩形无遮挡,BatchLOS/Sight 有遮挡但为圆形。
新增 BoxLOS 槽位:OverlapBox 矩形区域 + 从感知原点多点 LOS 遮挡校验,
用于走廊/平台等横向矩形视野带遮挡的场景。
- enum 末尾追加 BoxLOS(避免打乱既有序列化索引)
- 复用 boxSize/boxOffset 定义矩形、losBlockMask/losRayCount/losMinVisibility 定义遮挡
- 方向由 boxOffset.x 控制:0=前后双向对称,boxSize.x*0.5=仅前向
- Editor 补 Gizmo(矩形+眼点+实时检测连线)与条件字段
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 15:54:17 +08:00 |
|
 joywayerandClaude Opus 4.8
|
fccd87df6b
|
fix(enemy): 修复退出 Play 时巡逻调试 Inspector 的 NRE 与 IMGUI 报错
退出 Play 有一个窗口:Application.isPlaying 仍为 true 但 PBWorld 已销毁,此时 Inspector
调 nav.CanReach → PBWorld.PathTo(instance=null) 抛 NRE;该异常在 IMGUI 布局组中途中断,
使 BeginHorizontal 组失衡 → 级联 ArgumentException("control N in a group with only N controls")。
修:
- 订阅 playModeStateChanged,ExitingPlayMode 置 _exitingPlay,CanReach 调用点加
!_exitingPlay && isPlaying 守卫,退出期不再查询已销毁的 PBWorld。
- 运行时区块的绘制判定只在 Layout 事件锁定、Repaint 复用,避免 isPlaying 在两趟 GUI
间翻转导致控件数不一致。
实测:选中敌人连续两次进/退 Play,Console 无 NRE/ArgumentException。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 15:33:41 +08:00 |
|
 joywayerandClaude Opus 4.8
|
854bcb3d6f
|
perf(enemy): 感知系统 Inspector 限频重绘,修复选中敌人掉帧
PhysicsPerceptionSystemEditor.OnInspectorGUI 尾部每帧 Repaint(),选中敌人时强制整个多组件
Inspector(本编辑器逐槽位 IMGUI + 同物体其它自定义编辑器)以游戏帧率(100+fps)重绘,单帧多耗
~18ms → 帧率从 140 掉到 40。
改为与 EnemyLocomotionEditor 同款:走 EditorApplication.update 定频(~5Hz)请求重绘,与游戏
帧率解耦,移除每帧 Repaint。感知 Gizmo 本就 NonSelected|Selected 都画(在基线内,非选中新增成本)。
实测(平均帧):选中开销从 ~18ms/帧 降到 ~4.3ms/帧(未选中~106fps / 选中~73fps,原为 140→40)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 15:24:22 +08:00 |
|
 joywayerandClaude Opus 4.8
|
842a20fbb3
|
chore(enemy): [临时调试] E001 初始态改为 Move_Patrol,出生即巡逻便于 MCP 调试
仅为调试方便:Entry 从 Idle_Disguise 改为 Move_Patrol,一进场就走 Waypoints。
正式版应改回 Idle_Disguise(伪装静止),代码处已留 [临时调试] 注释标记待回退。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 15:13:30 +08:00 |
|
 joywayerandClaude Opus 4.8
|
16edf7cb90
|
fix(enemy): Waypoint 巡逻寻路失败/丢失时自动重发,修复出生即巡逻卡死
TickPatrol 原来只在"首次或到达路点"时发一次 MoveTo。若这一次 UpdatePath 失败(如敌人
刚出生、当帧尚未映射到 NavGraph),路径永不建立且再不重试 → 永久原地不动(mode=Patrol
但 IsFollowingAPath=False)。旧 Entry=Idle_Disguise 因巡逻只在出生很久后才开始而掩盖了此问题。
新增:有目标但 nav 空闲(!IsMoving)且未到达 → 重发同一目标(只重发不推进索引;RequestMoveTo
自带 0.25s 防抖,寻路跨帧计算期间的重发被吞掉,不会每帧重启寻路)。
Play 实测:出生即在两路点间以 WalkSpeed 正常往返巡逻。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 15:13:19 +08:00 |
|
 joywayerandClaude Opus 4.8
|
be7d511e45
|
feat(enemy): 巡逻调试 Inspector 加"一键打印报告"按钮(供 AI 诊断)
点击将完整状态以纯文本 Debug.Log 到 Console,可直接复制给 AI:AI决策层(EnemyState/
BrainGraph 当前状态名/LocomotionMode)、移动导航(Nav类型/IsMoving/IsOnLink/HasValidPosition/
PB2d Position/EdgeSafeMargin/_maxSnapDistance)、Waypoints(当前索引/吸附目标/CanReach/逐路点
实时吸附检测 raw→snap 及垂直差)、文末一句根因诊断。编辑期打印静态配置,Play 期打印运行时全量。
实测输出直指根因:Brain='Idle_Disguise' → LocomotionMode=Idle → TickPatrol 不执行。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 15:04:53 +08:00 |
|
 joywayerandClaude Opus 4.8
|
424d9bbbe0
|
perf(enemy): 巡逻调试 Inspector 限频,消除每帧阻塞式 CanReach 掉帧
上版 OnInspectorGUI 每帧 Repaint 且每帧调用 NavAgent.CanReach——该 API 会同步阻塞主线程
跑一次完整寻路(其文档自述"not optimal for performance"),选中敌人时每帧一次直接把帧率拖垮。
改为:刷新走 EditorApplication.update 定频(~5Hz)与游戏帧率解耦;CanReach 限频 ~2Hz 并缓存;
_maxSnapDistance 运行期不变只读一次缓存(不再每帧 new SerializedObject)。实测选中敌人 ~53fps 稳定无卡顿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 13:15:53 +08:00 |
|
 joywayerandClaude Opus 4.8
|
00ee48f750
|
feat(enemy): EnemyLocomotion 运行时巡逻调试(Inspector 面板 + Scene Gizmos)
排查"敌人原地不动"用:PlayMode 下自定义 Inspector 实时显示 模式/策略/是否移动/是否在导航图上/
当前路点与吸附目标/到目标距离vs到达半径/目标是否可达,并按优先级给出定位诊断(模式非Patrol|不在
NavGraph|吸附失败|不可达|已寻路未动)。Scene 视图 Gizmos 画出全部路点连线 + 当前吸附目标(绿/红)+到达半径。
EnemyLocomotion 加 #if UNITY_EDITOR 只读调试访问器 + OnDrawGizmosSelected;记录 _wpResolveOk。
Editor 程序集补 BaseGames.AI 引用(PatrolStrategy/LocomotionMode 所在)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 11:57:02 +08:00 |
|
 joywayerandClaude Opus 4.8
|
66d100f353
|
fix(enemy): 目标点吸附改用固定大搜索距离,与 PB2d 映射任意点机制一致
上版把搜索距离绑到 agent→目标距离(仿 UpdatePath),仍脆弱:吸附距离取决于 agent 离得多远
而非目标离导航段多远——agent 贴在高处路点正下方时距离小、reach 小仍会漏。
查明 PB2d 映射机制(NavGraph.TryMapPointSurface):queryAABB 边长=传入值、可靠搜索半径仅其一半;
PB2d 映射"鼠标点击等任意点"用固定的 closestToSegmentMaxDistance(默认 20,"想多大就多大")。
据此改为:EnemyNavAgent._maxSnapDistance(默认 10m,真实"点离最近段"上限),底层传 2× 补偿 AABB 半宽。
只要目标在 _maxSnapDistance 内一定吸附到最近烘焙段,返回 false 仅表示目标真正脱离导航面。
Play 实测:两路点 + 压力用例(agent 正上方 3m/5m)ResolveStandablePoint 均 ok=True 且映射到地面段。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 10:35:24 +08:00 |
|
 joywayerandClaude Opus 4.8
|
4ecf949d83
|
fix(enemy): 目标点吸附改用距离自适应搜索,修复稍离地路点吸附失败
之前 TryGetStandablePointNear 用固定 2m 搜索半径(实为 ±1m AABB)+ agent 过滤映射,
导致摆放在离地面 >1m 的路点(如 wp y=3.16 而地面段 y=2.00)映射失败、误报"超出搜索半径"。
改为与 PB2d 自身 UpdatePath 映射目标完全一致:搜索距离=agent 到目标距离(+0.1),
用不带 agent 过滤的 TryMapPoint(就近段几何映射,可达性交给 allowCloseEnoughPath 寻路阶段)。
只要图上有段就一定吸附得到最近点。移除 EnemyNavAgent._goalMapSearchRadius 固定半径字段。
Play 实测:两个路点 ResolveStandablePoint 均 ok=True((-20.90,3.16)->(-20.90,2.00)),
CanReach=True,敌人实际走到 x=-20.75(目标 -20.90)后停,无 EnemyLocomotion 报警。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-23 10:10:35 +08:00 |
|
 joywayerandClaude Opus 4.8
|
132cd24908
|
feat(enemy): 目标点吸附统一处理导航宽度,Waypoint 不再卡崖边
将"角色导航宽度"收口到导航执行层单一入口,意图层(Locomotion/AI)只递原始目标、不再感知身体尺寸:
- NavAgent 新增 TryGetStandablePointNear:把世界点映射到最近可行走段并按 endMargin 内缩两端(与 SetRandomDestinationOnCurrentSegment 同源)
- EnemyNavAgent 新增 ResolveStandablePoint,以 EnemyMovement.EdgeSafeMargin(半宽+落崖余量)为唯一宽度真源;加 _goalMapSearchRadius
- IPathAgent 暴露 ResolveStandablePoint;FlyingDirectNavigator 原样返回(飞行无崖沿约束),NullPathAgent 空实现
- EnemyLocomotion Waypoint 分支改用吸附后的可达点做移动与到达判定,修复路点摆在空中/崖外时永不到达而卡死;吸附失败显式报错暴露误配,不静默兜底
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-22 15:52:18 +08:00 |
|
 joywayerandClaude Opus 4.8
|
7f7d237915
|
feat(enemy): Wander 到达随机点后可配置停顿时长
到达一个段内随机游走点后原地停顿 [_wanderPauseMin, _wanderPauseMax] 秒再挑下一个点:
- 两个可配置字段(相等=固定时长;都为 0=不停顿立即挑点),每次停顿时长在区间内随机
- 停顿期间切 Idle 步态(否则站着播 Walk=原地踏步),速度归零
- 切换 locomotion 模式时清停顿态,避免残留
实测:移动→到点→停顿(Idle,velX=0)→再出发 循环正常。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-22 13:45:21 +08:00 |
|
 joywayerandClaude Opus 4.8
|
31b77fa473
|
feat(enemy): Wander 巡逻改为当前段内随机 + 按身体宽度内缩两端
修复地面单位 Wander 巡逻"走一小段就停":
- 随机点从全图(GetRandomPointOnGraph)改为限定在 agent 当前所站的 NavSegment 上,
不再跨越跳/落/拐角 NavLink,避免路径跨沟被崖边夹停或卡在过不去的 link。
- 段内随机 t 按"身体前缘安全余量(碰撞体半宽 + 悬崖检测前向偏移)"从两端各内缩,
避免随机点落在角色宽度站不住的崖沿(WouldFallAhead 夹停、IsFollowingAPath 不复位→卡死)。
- NavAgent.SetRandomDestinationOnCurrentSegment(endMargin):段内采样+内缩(段过短退化到中点)
- EnemyMovement.EdgeSafeMargin:身体前缘安全余量
- IPathAgent.WalkToRandomOnSegment():EnemyNavAgent 传入 margin;飞行单位复用局部偏移;Null 返回 false
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-22 12:45:01 +08:00 |
|
 joywayerandClaude Opus 4.8
|
46c9718793
|
docs: 删除 Behavior Designer 选型评估文档
BD 已被自研 BrainGraph HFSM 替换、不再使用,其选型评估文档一并移除。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-21 16:40:42 +08:00 |
|
 joywayerandClaude Opus 4.8
|
9226eb0330
|
docs: 删除过时指南 02(敌人搭建) 与 08(BD 行为树编写)
- 02_Enemy_Boss_Setup_Guide:敌人框架仍在改动、预制体延后,指南暂删待功能定稿后重写
- 08_BehaviorTree_Authoring_Guide:Behavior Designer 已被自研 BrainGraph HFSM 替换,BD 不再使用
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-21 16:39:16 +08:00 |
|
 joywayerandClaude Opus 4.8
|
3bca15b69e
|
fix(wizard): 移除 E001 残留的 Alert 能力定义
Alert/警觉张口在 locomotion 重构后已改为纯移动模式(LocomotionMode.Face),
不再是能力(ABL_E001_Alert SO 已删);起手张口并入 ContactChaseAbility 的 Skill_Start。
向导 GetEnemyAbilityDefs 里 E001 仍列 ("Alert","e001_alert") 是残留,
会导致重跑向导时又造一个无用 SO。E001 现只保留 Chase 能力。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-21 16:35:15 +08:00 |
|
 joywayerandClaude Opus 4.8
|
a94348d64c
|
chore(enemy): 移除 E001-E006 小怪预制体(延后至功能定稿再用脚手架产出)
敌人框架改动期间不再维护预制体,待所有敌人功能定稿后用 SceneObjectPlacerTool 统一重建。
ChaoFeng Boss 预制体保留。
- 删除 6 个 ENM_*.prefab 及 .meta
- Enemies.asset(Addressables 组)同步移除条目
- TestRoomA.unity 移除失效敌人实例引用
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-21 16:31:44 +08:00 |
|
 joywayerandClaude Opus 4.8
|
6f519ec9a9
|
refactor(enemy): 身体接触伤害改为常驻开启并与能力解耦
所有敌人默认常驻身体接触伤害:存活即开、死亡时经 PerformDeath 统一关碰撞体停止。
- ContactChaseAbility/AnimatedCeilingDropAbility 移除对 BodyContactDamage 的开关引用
- BodyContactDamage 语义改为常驻(更新注释)
- 脚手架 SetupHurtAndContactBoxes 去掉 contactEnabled 参数恒为 true,并把
ContactDamageZone 的 HitBox._targetLayers 限定为 PlayerHurtBox(避免常驻后敌人互相误伤)
- 7 个敌人预制体:E001 启用 BodyContactDamage;E002/E004/E005/ChaoFeng 补齐
ContactDamageZone(镜像 HurtBox 身体碰撞体);全部 _targetLayers 收敛为 PlayerHurtBox
- 更新 Docs/Guides/02 敌人搭建指南
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-21 16:18:07 +08:00 |
|
 joywayerandClaude Opus 4.8
|
b4379db5de
|
docs(game): 建立游戏设计文档规范并迁移重写 Docs/Game 设计文档
- 新增 Docs/Standards/GameDesignDocSpec.md:目录结构/通用文档头/六类分节/命名编号/交叉引用/禁参考游戏字样
- Docs/Game 按类别重组:总览/主角/敌人(小怪+Boss)/NPC/系统/剧情 + _Templates 模板
- 小怪 E001-E006、嘲风:程序文档+动作需求表合并为单份综合文档
- 其余 7 Boss 迁移设计层内容,程序/动画/数值节标注待补充
- 主角能力设定清除全部外部游戏参考字样并修正 OCR 乱码
- 删除 参考/ 原始文档(已忠实重写,原件保留于 git 历史)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-21 15:42:33 +08:00 |
|
joywayer
|
94bbf3acf2
|
chore(data): 7 个 ABL_ 能力资产重型为对应子类 SO 并迁入参数(m_Script+字段)
|
2026-07-21 12:17:21 +08:00 |
|