139 lines
3.5 KiB
Markdown
139 lines
3.5 KiB
Markdown
|
|
# 实体系统
|
||
|
|
|
||
|
|
## 分类
|
||
|
|
|
||
|
|
- 核心框架
|
||
|
|
|
||
|
|
## 目的
|
||
|
|
|
||
|
|
管理游戏实体的创建、生命周期、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<T>()
|
||
|
|
-> HFClassEntityManager.Instance.GetClassEntity<T>() // 创建或复用系统对象
|
||
|
|
-> 生成对应 IModel
|
||
|
|
-> model.Init(this, system.Init) // 建立实体、模型、系统关系
|
||
|
|
```
|
||
|
|
|
||
|
|
更新顺序:
|
||
|
|
|
||
|
|
```text
|
||
|
|
OnSystemUpdate() // 表现层更新
|
||
|
|
OnModelUpdate() // 数据层更新
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 实体池机制
|
||
|
|
|
||
|
|
`HFEntityPool` 按 `enEntityLayer` 注册不同的 `AbsHFEntityPool` 实现。
|
||
|
|
|
||
|
|
创建实体:
|
||
|
|
|
||
|
|
```text
|
||
|
|
AbsHFEntityPool.OnCreateEnity<T>()
|
||
|
|
-> 创建 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<T>()` 添加,避免直接 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) | 模块登记规则定义分类和状态口径 |
|