建筑实体¶
建筑实体是插件用于表示已放置建筑的核心数据。
每个建筑对应一个 FBuildingEntity,保存建筑标识、世界变换、建筑资产、所有者和持久化状态。
HISM Instance 和 Building Actor 只是根据实体创建的运行时表现。
Note
FBuildingEntity 是建筑的逻辑数据。
Actor 引用、HISM Component 和 Instance Index 不应作为建筑的稳定标识。
数据结构¶
| 字段 | 说明 |
|---|---|
Entity Id |
建筑实体的唯一标识。 |
Chunk Id |
建筑当前所属的运行时 Chunk。 |
World Transform |
建筑的世界位置、旋转和缩放。 |
Buildable Asset Id |
建筑使用的 Building Data Asset。 |
Owner Id |
建筑所属的玩家、阵营、NPC 或系统。 |
Entity Data |
建筑的附加持久化状态。 |
Entity Id¶
Entity Id 用于查询、移动、修改和移除建筑。
存档重建时,插件会保留已有建筑的 Entity Id,并将下一个 ID 设置为:
Chunk Id¶
Chunk Id 用于运行时空间分区、渲染和网络管理。
Chunk 会在重建时根据 World Transform 重新分配,因此不应作为长期稳定标识。
详情请参阅 Chunk 系统。
World Transform¶
World Transform 保存建筑的完整世界变换:
- Location
- Rotation
- Scale
插件使用该变换重新创建 HISM Instance、Building Actor 和碰撞表现。
Buildable Asset Id¶
Buildable Asset Id 是建筑定义资产的 Primary Asset Id。
插件通过它查找对应的 Building Data Asset,并读取:
- 渲染模式
- Static Mesh
- Actor Class
- Preview Mesh
- 其他建筑配置
详情请参阅 建筑数据资产。
Owner Id¶
Owner Id 由所有者类型和稳定字符串 ID 组成。
| 字段 | 说明 |
|---|---|
Type |
所有者类型。 |
Id |
所有者的稳定标识。 |
支持以下类型:
| 类型 | 说明 |
|---|---|
None |
没有有效所有者。 |
Player |
玩家。 |
Faction |
阵营或队伍。 |
NPC |
NPC。 |
System |
游戏系统或世界。 |
Owner Id 不保存 Player Controller、Player State、Pawn 或 Actor 引用。
项目应提供可跨重连和存档保持稳定的 ID。玩家所有者通常通过 Building Owner Provider 接口提供。
Entity Data¶
Entity Data 保存单个建筑的持久化状态,例如:
- 建筑生命值
- Gameplay Tags
- 自定义属性
- 项目扩展数据
Note
建筑类型的静态配置应保存在 Building Data Asset。
单个已放置建筑的状态应保存在 Entity Data.
实体与运行时表现¶
只有 Entity Id 是稳定的建筑标识。
Instance Index 可能因移除实例、重建 HISM 或重新加载 Chunk 而改变。
更新数据¶
FUpdateBuildingEntityInfo¶
包含完整实体和 Snap Tree:
| 字段 | 说明 |
|---|---|
Entity |
完整建筑实体。 |
Snap Tree |
吸附点占用和连接数据。 |
该结构主要用于存档收集和世界重建。
FUpdateBuildingEntityIdInfo¶
用于只更新位置和 Snap Tree:
| 字段 | 说明 |
|---|---|
Entity Id |
目标实体。 |
World Transform |
新的世界变换。 |
Snap Tree |
更新后的吸附数据。 |
保存与恢复¶
推荐流程:
重建时:
- 保留
Entity Id - 根据位置重新分配
Chunk Id - 重新创建 HISM Instance 或 Building Actor
- 将下一个 Entity ID 设置为最大现有 ID 加一
不应保存:
- Actor 引用
- HISM Component 引用
- Instance Index
- Chunk Actor 引用
- Player Controller 或 Player State 引用
详细流程请参阅 存档与恢复。
网络同步¶
服务器是建筑实体数据的权威来源,负责:
- 创建和移除实体
- 分配
Entity Id - 验证建筑修改
- 更新建筑状态
- 同步实体变化
客户端接收实体数据后,创建或更新本地 HISM Instance 或 Building Actor。