← 全部概念
性能优化 / 34
区块流式加载
只加载玩家附近的内容
交互演示
交互演示 · 移动指针或点击画面,观察变化
区块流式加载将大世界拆成固定大小的区块,只把玩家附近的区块保留在内存中。这里的 98 个区块中,只需保留 8 到 14 个;即使世界有 10,000 个区块,所需保留的数量也一样。区块进入实线圆时加载,只有离开更大的虚线圆后才卸载,所以玩家在区块边界来回走动也不会触发反复加载。如果只用一个半径,同样的走动会在 2 秒内让区块卸载并重新加载 8 次。
适用场景
使用区块,让大世界中活跃的内存内容和模拟范围局限在玩家附近。异步构建区块数据,再在合适的线程上启用渲染和物理。
实现示例
不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。
for chunk in chunksWithin(player, loadRadius):
requestLoad(chunk)
for chunk in loadedChunks:
if distance(player, chunk) > unloadRadius:
requestUnload(chunk)
// 卸载半径 unloadRadius 应大于加载半径 loadRadius。常见错误
不要卸载仍有待保存内容,或仍被活跃相邻区块引用的区块。也要为激活操作预留预算:即使加载在后台线程进行,一次创建大量物体仍可能造成帧耗时骤增。
内容原作 Nicolas Zullo · 中文整理与交互改编