【AI编码】增加文档

main
刘涛 2026-02-06 19:11:13 +08:00
parent 686a411543
commit dc27102ca7
1 changed files with 75 additions and 0 deletions

View File

@ -0,0 +1,75 @@
# ShowAreaId 相关逻辑说明
## 一、字段定义
`ShowAreaId` 定义在技能配置表 `DataSkill`Luban 自动生成),类型为 `int`,注释为 **"显示的区域id"**。
- 非 0 值:引用 Area 配置表中的一个区域形状 ID通过 `AreaManager.GetCellIndexs(centerCellIndex, areaId)` 可以计算出该区域覆盖的格子列表。
- **0 值:表示该技能没有显示区域,不应产生任何表现效果。**
与之相关的另一个字段是 `InfluenceAreaId`(技能实际生效范围),两者用途不同:
- `InfluenceAreaId` —— 技能逻辑上实际生效的区域
- `ShowAreaId` —— 技能在表现层用于展示/预览的区域
## 二、使用场景(共 5 处)
### 1. 技能释放时的地面高亮 —— 角色
**文件**`FullStateSkill.cs` → `_PlayGroundEffect()`
**用途**:角色释放技能时,在目标格子上显示地面高亮特效。
**条件链**`needSkillCover == true` → `IsEmitToFloor == true``ShowAreaId != 0` → 创建高亮
### 2. 技能释放时的地面高亮 —— 载具
**文件**`VehicleStateSkill.cs` → `_PlayGroundEffect()`
**用途**:与上面相同,但作用于载具单位。逻辑一致。
### 3. 技能释放检查 —— 玩家选择区域
**文件**`SkillAreaSelector2.cs` → `_CheckShowAreaCellContainsSide()`
**用途**:在玩家选择技能释放位置时,检查以某格子为中心、`ShowAreaId` 定义的区域范围内是否包含指定阵营的单位。用于 `EReleaseCheckType.AreaContainsEnemy``AreaContainsSelfSide` 两种释放检查类型。
**ShowAreaId 为 0 时**:返回 `false`,意味着该格子不满足释放条件,不会被加入可选列表。
### 4. 技能释放检查 —— AI 决策
**文件**`AISkillCheck.cs` → `_CheckShowAreaCellContainsSide()`
**用途**:与上面相同的逻辑,但用于 AI 自动决策时判断技能释放位置。逻辑完全一致。
### 5. 暂停状态下缓存技能区域显示
**文件**`InPauseCacheSkillArea.cs` → `_ShowCachedSkillArea()`
**用途**:在战斗暂停时,对已缓存的技能释放位置,通过 `GroundPlaneManager` 在地面上显示技能影响区域的预览。
**ShowAreaId 为 0 时**:打印警告日志并跳过,不显示任何区域。
## 三、核心调用链路
```
ShowAreaId
├─ 表现层(地面高亮)
│ ├─ FullStateSkill._PlayGroundEffect() ── 角色技能释放时
│ ├─ VehicleStateSkill._PlayGroundEffect() ── 载具技能释放时
│ └─ InPauseCacheSkillArea._ShowCachedSkillArea() ── 暂停时预览缓存技能
└─ 逻辑层(释放条件检查)
├─ SkillAreaSelector2._CheckShowAreaCellContainsSide() ── 玩家选择释放位置
└─ AISkillCheck._CheckShowAreaCellContainsSide() ── AI 选择释放位置
```
## 四、ShowAreaId == 0 的统一规则
| 场景 | ShowAreaId == 0 时行为 |
|------|----------------------|
| 角色地面高亮 | 跳过,不创建高亮特效 |
| 载具地面高亮 | 跳过,不创建高亮特效 |
| 暂停缓存预览 | 跳过,不显示区域预览 |
| 玩家释放检查 | 返回 `false`,该格子不满足释放条件 |
| AI 释放检查 | 返回 `false`,该格子不满足释放条件 |