# 实体系统 ## 分类 - 核心框架 ## 目的 管理游戏实体的创建、生命周期、System-Model 架构、实体池和子系统协作。 --- ## 核心路径 - 实体框架:`Assets/Game/GameHFScripte/GameFunction/GameEntity/` - 实体数据:`Assets/Game/GameHFScripte/GameFunction/Logic/EntityData/` - 子目录:`Core/`、`Entity/`、`EntityPool/`、`RVO/`、`StateMachineBehaviour/` --- ## 核心类 | 类 | 职责 | |---|---| | `HFAbsEntity` | 实体基类,继承 `AbsHFSimulateBehaviour` | | `HFEntity_Basic` | 基础实体标签 | | `HFEntity_Enemy` | 敌人类型标签 | | `HFEntity_Human` | 人类/玩家类型标签 | | `HFEntityPool` | 实体池入口 | | `HFBasicPool` / `HFEnemyPool` / `HFHumanityPool` | 按 `enEntityLayer` 分类的实体池实现 | | `AbsHFEntityPool` | 实体池抽象基类 | | `stEntityInfo` | 实体数据结构 | --- ## System-Model 架构 `HFAbsEntity` 内部维护两个集合: ```text m_Models : IModel[] // 数据层 m_Systems : ISystem[] // 表现层/逻辑层 ``` 按 `enSystemType` 关联 `IModel` 和 `ISystem`。 添加系统: ```csharp AddSystem() -> HFClassEntityManager.Instance.GetClassEntity() // 创建或复用系统对象 -> 生成对应 IModel -> model.Init(this, system.Init) // 建立实体、模型、系统关系 ``` 更新顺序: ```text OnSystemUpdate() // 表现层更新 OnModelUpdate() // 数据层更新 ``` --- ## 实体池机制 `HFEntityPool` 按 `enEntityLayer` 注册不同的 `AbsHFEntityPool` 实现。 创建实体: ```text AbsHFEntityPool.OnCreateEnity() -> 创建 GameObject 根节点 -> 维护 onlyid -> entity 索引 -> 维护 EntityId -> onlyid 索引 ``` 查询实体: ```text HFEntityPool.SelectByOnlyid(onlyid) -> 通过 onlyid -> enEntityLayer 找到对应池 -> 从具体池取实体 ``` 回收实体: ```text DelEntityByOnlyid(onlyid) -> 从池索引移除 -> 调用 entity.Recycle() ``` --- ## 子系统 实体相关的子系统通常位于: - `Models/AI`、`Systems/AI` — AI - `Models/Animation`、`Systems/Animation` — 动画 - `Models/Feature`、`Systems/Feature` — 特性/属性 - `Models/Move`、`Systems/Move` — 移动 - `Models/Skill`、`Systems/Skill` — 技能 - `HFSkillTrigger_*` — 技能触发器 - `HFSkill_*_Releaser` — 技能释放器 - `GameEntity/RVO/RVOManager.cs` — RVO 避障 --- ## 使用规则 - 新实体类型应继承 `HFAbsEntity`。 - 实体对象统一通过 `HFEntityPool` 创建和回收。 - 系统通过 `AddSystem()` 添加,避免直接 new。 - 子系统数据更新放在 `OnModelUpdate()`,表现更新放在 `OnSystemUpdate()`。 --- ## 相关模块 - [技能系统](../技能系统/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) | 模块登记规则定义分类和状态口径 |