Chunk 系统¶
Chunk 系统用于将世界中的建筑按空间区域进行分组管理。
每个 Chunk 负责管理一定范围内的建筑实体、渲染组件和网络同步数据,从而避免所有建筑都集中在同一个 Actor 或组件中。
Chunk 系统主要用于:
- 管理大量建筑实体
- 对 HISM 建筑进行分组渲染
- 管理 Actor 模式建筑
- 限制单次更新和重建的范围
- 组织建筑网络同步
- 为存档和区域加载提供基础
Note
Chunk 是建筑系统内部的空间管理方式。 正常使用插件时,项目通常不需要直接创建或管理 Chunk Actor。
基本结构¶
建筑系统会根据建筑的世界位置,计算建筑所属的 Chunk。
每个 Chunk 通常对应一个建筑渲染和同步 Actor,并管理该区域中的建筑。
Building Subsystem
├── Chunk A
│ ├── HISM 建筑
│ ├── Actor 建筑
│ └── 建筑实体数据
├── Chunk B
│ ├── HISM 建筑
│ ├── Actor 建筑
│ └── 建筑实体数据
└── Chunk C
├── HISM 建筑
├── Actor 建筑
└── 建筑实体数据
建筑在当前世界运行期间会记录其所属的 Chunk ID,用于查找对应的 Chunk。
Chunk ID 属于运行时空间管理数据,不应作为跨世界加载或存档中的稳定建筑标识。
Chunk Actor¶
每个 Chunk Actor 负责管理对应区域内的建筑表现。
主要包括:
| 内容 | 说明 |
|---|---|
| 建筑实体 | 保存该 Chunk 中建筑的基础数据。 |
| HISM Component | 批量渲染使用相同模块的建筑。 |
| Actor 建筑 | 管理门、箱子、工作台等独立 Actor。 |
| 实例映射 | 记录建筑 Entity 与 HISM Instance 之间的对应关系。 |
| 网络同步 | 同步该 Chunk 中建筑的添加、修改和移除。 |
项目通常通过建筑系统提供的接口操作建筑,而不是直接修改 Chunk Actor。
建筑实体与渲染表现¶
Chunk 中的建筑实体数据与建筑的渲染表现是分开的。
建筑实体通常保存:
- Entity ID
- Chunk ID
- Building Data Asset ID
- World Transform
- 建筑属性
- 建筑所有者
- 其他运行时数据
渲染层根据实体数据创建:
- HISM Instance
- 建筑 Actor
- 对应的视觉状态
这种设计可以让建筑系统在不依赖具体渲染对象的情况下管理建筑数据。
网络同步¶
在联网游戏中,建筑实体数据由服务器管理。
服务器负责:
- 创建建筑实体
- 验证建筑操作
- 修改建筑数据
- 移除建筑实体
- 同步 Chunk 数据
客户端收到实体数据后,在本地创建或更新对应的建筑表现。
HISM Instance 本身不会直接作为独立网络 Actor 复制,因此客户端会根据同步到的建筑实体数据,在本地更新 HISM。
基本流程如下:
这种方式可以避免为每一个普通建筑模块创建独立的复制 Actor。
Chunk Size¶
可以在以下位置配置 Chunk 大小:
较小的 Chunk¶
较小的 Chunk 通常具有以下特点:
- 单个 Chunk 中的建筑数量较少
- 局部更新涉及的建筑更少
- 会产生更多 Chunk Actor
- Chunk 管理数量增加
较大的 Chunk¶
较大的 Chunk 通常具有以下特点:
- Chunk Actor 数量较少
- 单个 Chunk 中可能包含更多建筑
- 单次重建可能处理更多实例
- 单个 Chunk 的同步数据可能更大
Chunk Size 没有适合所有项目的固定值,应根据以下因素测试:
- 地图大小
- 建筑密度
- 单个基地的范围
- 常见建筑模块尺寸
- 联机玩家数量
Chunk 与存档¶
存档系统通常应保存建筑实体数据,而不是直接保存 HISM Component 或 Actor 引用。
推荐保存:
- Entity ID
- Chunk ID
- Building Data Asset ID
- World Transform
- 建筑属性
- 所有者数据
- 项目自定义数据
加载时的基本流程:
HISM Instance 和建筑 Actor 属于运行时表现,可以根据实体数据重新创建。
使用建议¶
建议根据建筑用途选择合适的渲染方式:
| 情况 | 建议 |
|---|---|
| 大量重复墙体、地板和屋顶 | 使用 HISM |
| 门、箱子和工作台 | 使用 Actor |
| 大范围低密度建造 | 可以适当增大 Chunk |
| 小范围高密度建造 | 测试较小或中等 Chunk |
| 已经存在正式存档 | 避免修改 Chunk Size |
| 需要保存建筑引用 | 使用 Entity ID |
| 需要访问当前 HISM 实例 | 运行时查询 Instance Index |
不要仅根据理论值决定最终的 Chunk Size。
建议使用项目中的实际建筑数量、地图规模和多人环境进行测试。
相关设置¶
Chunk 的项目级设置请参阅 插件设置。