NLDClient-yudde/ProjectNLD/AI_Gen_Doc/ShowAreaId相关逻辑说明.md

3.3 KiB
Raw Permalink Blame History

ShowAreaId 相关逻辑说明

一、字段定义

ShowAreaId 定义在技能配置表 DataSkillLuban 自动生成),类型为 int,注释为 "显示的区域id"

  • 非 0 值:引用 Area 配置表中的一个区域形状 ID通过 AreaManager.GetCellIndexs(centerCellIndex, areaId) 可以计算出该区域覆盖的格子列表。
  • 0 值:表示该技能没有显示区域,不应产生任何表现效果。

与之相关的另一个字段是 InfluenceAreaId(技能实际生效范围),两者用途不同:

  • InfluenceAreaId —— 技能逻辑上实际生效的区域
  • ShowAreaId —— 技能在表现层用于展示/预览的区域

二、使用场景(共 5 处)

1. 技能释放时的地面高亮 —— 角色

文件FullStateSkill.cs_PlayGroundEffect()

用途:角色释放技能时,在目标格子上显示地面高亮特效。

条件链needSkillCover == trueIsEmitToFloor == trueShowAreaId != 0 → 创建高亮

2. 技能释放时的地面高亮 —— 载具

文件VehicleStateSkill.cs_PlayGroundEffect()

用途:与上面相同,但作用于载具单位。逻辑一致。

3. 技能释放检查 —— 玩家选择区域

文件SkillAreaSelector2.cs_CheckShowAreaCellContainsSide()

用途:在玩家选择技能释放位置时,检查以某格子为中心、ShowAreaId 定义的区域范围内是否包含指定阵营的单位。用于 EReleaseCheckType.AreaContainsEnemyAreaContainsSelfSide 两种释放检查类型。

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