@
docs(ai): 明确 PB2d 不支持飞行导航 + 飞行绕障缺口 核实 PathBerserker2d 为表面图寻路(NavSurface/NavSegment/NavLink),不支持 飞行;飞行怪走 FlyingDirectNavigator 直线直飞。EnemyLocomotion 收编两个 IPathAgent 后端。补记"飞行绕障"为已知缺口(现有直飞无绕障,需单独飞行寻路 方案),非本次范围。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> @
This commit is contained in:
@@ -61,7 +61,10 @@ namespace BaseGames.Enemies
|
||||
}
|
||||
```
|
||||
|
||||
- **内部后端不变**:地面怪用 `EnemyNavAgent`(PathBerserker2d)、飞行怪用 `FlyingDirectNavigator`,作为可替换的 `IPathAgent`;`EnemyLocomotion` 是它们之上的唯一门面。物理原生架构(寻路只给方向、velocity 执行、碰撞体底部对齐 y=0)保持,见 [[enemy_nav_movement_architecture]]。
|
||||
- **内部双后端,作为可替换的 `IPathAgent`**:
|
||||
- **地面怪** = `EnemyNavAgent`(PathBerserker2d)。PB2d 是**表面图寻路**(`NavSurface`/`NavSegment` + 表面间 `NavLink`),agent 始终映射到可行走表面——**不支持飞行/自由空间寻路**(已核实包源码:`NavSegmentPositionPointer`/`IsOnLink`/`KeepGrounded`,零 fly/aerial 支持)。
|
||||
- **飞行怪** = `FlyingDirectNavigator`。**不走 PB2d**,直接 `Rigidbody2D.MovePosition` 向目标点**直线直飞**(含正弦悬停)。
|
||||
- `EnemyLocomotion` 是二者之上的唯一门面,按敌人类型选后端。物理原生架构(寻路只给方向、velocity 执行、碰撞体底部对齐 y=0)保持,见 [[enemy_nav_movement_architecture]]。
|
||||
- **巡逻 = `Patrol` 模式 + 每敌人序列化 `PatrolStrategy` + 参数**:一个组件三种玩法(Wander 随机 / Pace 撞墙翻向踱步 / Waypoints 路点序列),消灭 7 份实现并找回踱步/路点。
|
||||
- **速度单一来源**:由模式派生(Patrol→`WalkSpeed`、Approach→`RunSpeed`,读 `EnemyStatsSO`)。删除 `EnemyMovement` 对 `EnemyStatsSO` 的二次直读接线(`EnemyMovement._config`),删除经 `TBM.movementSpeed` 的速度中转重复。
|
||||
- **`Approach` 不改追击语义**:`ContactChaseAbility` 保留为能力;仅把内部 `_enemy.MoveTo(player)` 换成 `Locomotion.Approach(player)`;接触伤害(战斗语义)仍在能力里。
|
||||
@@ -125,7 +128,8 @@ Death : 终态(死亡演出走反应态 FSM)
|
||||
|
||||
## 7. 风险与缓解
|
||||
|
||||
- **飞行怪双模型**:`FlyingEnemy`/`FlyingDirectNavigator` 走 `MovePosition`,需在 `EnemyLocomotion` 内以 `IPathAgent` 后端形式收编,避免又留一套并行执行。P2 明确覆盖飞行分支。
|
||||
- **飞行怪双模型**:`FlyingEnemy`/`FlyingDirectNavigator` 走 `MovePosition`,需在 `EnemyLocomotion` 内以 `IPathAgent` 后端形式收编,避免又留一套并行执行。P2 明确覆盖飞行分支。`EnemyLocomotion` API 对上层一致,`SetMode/Approach/MoveTo` 在飞行后端映射为直飞目标点。
|
||||
- **飞行绕障是已知缺口(非本次范围)**:PB2d 表面寻路给不了飞行绕障,现有 `FlyingDirectNavigator` 是**直线直飞、无障碍绕行**;当前 E002/E004/E005/E006 prefab 两种导航组件都未挂(飞行导航"有实现未接线")。真要做"能绕墙的飞行怪"时需**单独的飞行寻路方案**(如 2D 网格 A*/点图),不能靠 PB2d 或现有直飞。本次不实现;作为落地飞行怪 AI 时的前置决策记录在案。
|
||||
- **物理原生易回归**:nav 只给方向、velocity 执行、`TBM.SegmentMovement` 关、碰撞体底部 y=0——重构中必须保留,见 [[enemy_nav_movement_architecture]]。
|
||||
- **动画覆盖顺序**:反应态/攻击 clip 必须能压过步态 clip;P4 需验证受击/攻击时步态不抢播。
|
||||
- **`AiPhase` 删除波及面**:`SetAiPhase` 有多处调用点(能力、`ReceiveAlert`、gizmo/overlay);P4 逐点迁移并保留调试可视化(改读状态名)。
|
||||
|
||||
Reference in New Issue
Block a user