type
status
date
slug
summary
tags
category
comment
icon
password
联机游戏中Map(映射)与Array of Structs(结构体数组)的使用事项和区别
特性 | 结构体数组 (Struct Array) | Map (映射 / 键值对) |
内存布局 | 连续内存:像整齐的抽屉,打包速度极快。 | 离散内存:基于哈希表,底层结构复杂,序列化开销大。 |
网络同步 | 原生支持增量同步 (Delta):仅传输变化的部分元素。 | 通常全量同步:一个小改动可能导致整个容器重新传输。 |
RPC 兼容性 | 极佳:作为 Run on Client/Server 参数非常稳定。 | 有限制:在某些复制事件中无法直接拖拽生成引脚。 |
功能扩展性 | 极强:结构体可随时增加“耐久、等级、槽位”等多个字段。 | 差:仅限于固定的“Key-Value”一对一映射。 |
查询性能 | O(n):需遍历数组,但在元素量少(如背包)时影响极小。 | O(1):无论数据量多大,查找速度几乎恒定。 |
UI 绑定 | 容易:可直接配合 ListView 或 TileView 使用。 | 较难:通常需要先转换成数组才能方便地驱动 UI 列表。 |
为什么联机游戏首选“结构体数组”?
增量复制 (Fast Array Serialization):
虚幻引擎对数组有专门的底层优化。如果一个包含 100 个物品的数组中只有一个数量发生了变化,引擎可以做到只发送这一个变化量,而不是发送全部 100 个物品的数据。
确定性与稳定性:
数组拥有固定的索引(Index)。在网络丢包或乱序到达时,客户端能根据索引准确更新对应位置,而 Map 依赖的哈希结构在网络波动时更容易出现数据不一致。
网络数据包大小:
由于数组在内存中是线性的,序列化后的字节流更紧凑,能有效降低网络延迟(Ping 值)。
- 作者:LiQingBa
- 链接:https://blog.liqingba.com/article/2eaa69f5-f1f3-804e-8c12-dca8a4c96885
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
