3.3 KiB
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,该格子不满足释放条件 |