# 技能系统 ## 分类 - 核心框架 ## 目的 为角色、怪物等实体提供统一的技能管理、冷却控制、释放接口和事件通知。 --- ## 核心组成 | 类/结构 | 职责 | |---------|------| | `HFGenericSkillSystem` | 通用技能系统,继承 `AbsHFSkillSystem` | | `HFGenericSkillModel` | 通用技能模型,继承 `HFAbsModel` | | `HFEvent_OnSkillUsed` | 技能使用事件 | | `stSkillConfig` | 技能配置结构 | --- ## 技能管理 ```csharp // 添加技能 skillSystem.AddSkill(skillId); // 移除技能 skillSystem.RemoveSkill(skillId); // 检查技能是否就绪 bool isReady = skillSystem.IsSkillReady(skillId); // 获取技能冷却时间 float cooldown = skillSystem.GetSkillCooldown(skillId); // 是否有技能在冷却 bool hasCooldown = skillSystem.HasSkillInCooldown(); // 清除所有冷却 skillSystem.ClearAllCooldowns(); ``` --- ## 技能使用 ```csharp // 对目标使用技能 skillSystem.UseSkill(skillId, targetEntity); // 对位置使用技能 skillSystem.UseSkillAtPosition(skillId, worldPosition); ``` 触发事件: ```csharp public class HFEvent_OnSkillUsed : AbsHFEventArg { public HFAbsEntity Caster { get; set; } public int SkillId { get; set; } public HFAbsEntity Target { get; set; } public Vector3 Position { get; set; } } ``` --- ## 自动配置加载 系统会根据实体配置自动加载技能: ```csharp var config = HFFunCatalogue.NDB.ds_EntityConfig_Sheet_TableData_1FC4334A.ReadTable(ownerEntity.EntityId); if (config != null && config.SkillID > 0) { AddSkill(config.SkillID); } ``` --- ## 实体中的添加方式 在角色或敌人实体中统一添加: ```csharp AddSystem(); ``` --- ## 子系统边界 从实体系统角度看,技能相关子目录通常包括: - `Models/Skill` — 技能数据模型 - `Systems/Skill` — 技能系统逻辑 - `HFSkillTrigger_*` — 技能触发器 - `HFSkill_*_Releaser` — 技能释放器 --- ## 使用规则 - 角色和怪物使用同一套技能系统接口。 - 技能 ID 在项目中应保持唯一。 - 技能效果逻辑应在事件处理器中实现,避免直接写在释放器里。 - 合理设置冷却时间以平衡游戏体验。 --- ## 相关模块 - [实体系统](../实体系统/README.md) - [事件系统](../事件系统/README.md) - [数据/配置框架](../数据配置框架.md) --- ## 文档关联 > 当本文档发生变更时,应同步检查以下关联文档,避免信息不一致。 | 文档 | 关联原因 | |---|---| | [modules/模块索引.md](../../模块索引.md) | 模块索引是项目知识总入口 | | [modules/frameworks/实体系统/README.md](../实体系统/README.md) | 技能系统是实体系统的子系统 | | [modules/frameworks/事件系统/README.md](../事件系统/README.md) | 技能使用事件依赖事件系统 | | [rules/10-架构说明.md](../../../rules/10-架构说明.md) | 架构说明定义总体分层和依赖方向 | | [rules/30-模块登记规则.md](../../../rules/30-模块登记规则.md) | 模块登记规则定义分类和状态口径 |