摘要:
- 当使用 Unity 的原生场景系统来加载大型世界 (大地形 + 多对象 + 高密度建筑/环境) 时,往往会出现无法接受的卡顿 、加载停顿 、内存与 GPU/CPU 占用过高的问题。
- World Streamer 2 (WS2) 插件提供"分块 (tile/chunk/sub‑scene) + 流式 (streaming) 加载 / 卸载 + 远景 LOD / 低多边形替换 + 异步 /后台加载 + 多层 (layers) 管理 + 室内 Collider‑trigger 加载 + 无限 /循环世界支持"等能力,从而支持开发"大世界 / 开放世界 /沙盒 /城市 /VR/仿真 /无限地图"项目,并显著降低瞬时资源消耗、平滑切换体验。

【Unity笔记】 WorldStreamer2指南------针对大世界的流式加载与优化
前言
Unity 原生场景系统一旦用于大型世界(大地形 + 多对象 + 高密度建筑/环境/物件),很容易遇到:
- 卡顿 / 帧率崩溃
- 加载停顿 / "Loading 场景"不可接受
- 内存 / GPU / CPU / VRAM 占用过高
- 难以做无缝世界 / 无限地图
如果直接用 SceneManager.LoadSceneAsync(...) 加载一个大场景,很可能在加载 / 激活阶段造成帧率短暂归零、甚至 UI 冻结。
为了应对这些问题,社区中有成熟方案:流式 (streaming) 加载 / 区块 (tile / chunk) 加载。在 Unity 中,WS2 是一个很流行、功能强大的插件 --- 专门用于把"世界"拆分 / 分区 / 分块,并在运行时按需 load / unload,从而实现大世界、高性能、低内存占用、无缝体验。
什么是 World Streamer 2
https://naturemanufacture.com/world-streamer-2
https://assetstore.unity.com/packages/tools/terrain/world-streamer-2-176482
World Streamer 2 是为 Unity 设计的"地形 + 世界 + 资源流式加载 + 管理"插件/系统。简而言之,它把一个"完整世界(big world)"拆成多个小区块 (tiles / chunks / sub-scenes),在玩家需要的时候再加载它们,在玩家离开或不需要的时候卸载它们。如此一来:
- 不会一次性加载整个世界 ------ 内存 / CPU / GPU 占用大幅下降
- 支持非常大的地图/地形 (理论上"无限世界")
- 支持地形、建筑、物件、树木、NPC、光照、导航、碰撞等资源流式加载与卸载(根据设定)
- 支持层级 (layers)/多场景 (multi-scene) 编辑与加载管理
- 支持低多边形 (low-poly) LOD / 远景替换 (far-distance low detail meshes)/远景剔除 / 视距管理 / 遮挡剔除 (Occlusion Culling) / Floating-Point 修正 / 循环世界 (looped world) / collider-trigger-based interior streaming 等高级特性 ([incern][1])
WS2 的目标是 ------ "让你能够用 Unity 制作大世界 (open world)、广阔地形、城市、沙盒、探索类游戏,而不需要面对一次性加载全世界的性能崩溃"。
根据插件官方与社区资料,它适用于:
- 开放世界游戏 / 沙盒 / RPG / 驾驶 / 飞行 / 探索类项目
- VR / AR / 模拟 / 大地图 / 城市 / 无限世界 / Procedural World / 动态生成世界
- 需要多人协作开发 / 多人同时编辑世界 (multi-dev) 的项目 (因为它支持多场景编辑) ([incern][1])
World Streamer 2 的核心功能与兼容性
功能特性
| 功能 / 特性 | 描述 / 优势 |
|---|---|
| 地形 & 场景分割 (Tile / Chunk / Sub-Scene) | 将整个 world 拆成多个小场景 (sub-scenes)/tiles,每个包含对应区域内的地形 + 对象。运行时只加载玩家附近 tiles,减少一次性资源载入。 ([CSDN][3]) |
| 多层 Streaming (Streaming Layers) | 支持把不同类别对象 (terrain / buildings / props / small objects / low-poly far-objects 等) 分到不同 layer,各自设定加载/卸载距离 & 优先级。可精细控制资源加载。 ([varden.ee][4]) |
| Low-poly / Far-distance Mesh Replacement (Ring Streaming) | 远距离使用低多边形版本 mesh/简化表示 (impostor/简化地形),减少远景渲染开销,同时保持视觉连贯性。 ([incern][1]) |
| 动态加载 / 异步 / 后台加载 | tiles / sub-scenes 异步加载与卸载,不会阻塞主线程 (至少在合理 tile 大小、正确设置下)。对于大世界、动态生成世界尤其重要。 ([CSDN][5]) |
| Floating-Point 精度修正 / 无限世界支持 | 对于非常大的地图 (坐标远离原点) 会出现浮点精度问题,WS2 内置浮点修正系统,避免精度误差、物理与渲染问题。理论上支持 "无限 / 循环世界 (Looped World)" / 无限地图。 ([incern][1]) |
| Collider-trigger / 室内 (Interior) 流式加载 | 对于建筑 / 室内 /洞穴 / 房间,可以使用 collider(触发区)来控制内部切换 --- 玩家进入 Room Collider 时加载室内 sub-scene/对象。适合室内 + 室外混合场景。 ([varden.ee][4]) |
| 多场景 / 多人开发支持 | 支持多人同时编辑不同 sub-scene / tiles,对于大团队 / 大世界协作开发非常友好。 ([incern][1]) |
| 兼容 Unity 多渲染管线 (Built-in / URP / HDRP) | 虽然为地形 & world-streaming 设计,但支持不同渲染管线 (需导入支持包) 。 ([cgioo.com][6]) |
| 减少 CPU / GPU / VRAM / RAM 占用 | 通过流式加载、远景替换、剔除、分块管理,显著减少同时激活与渲染 / 加载资源数目,因而降低各项资源消耗。 ([incern][1]) |
总之,WS2 是一个集地形分块、资源 / 场景流式加载、远景 LOD、内存/性能优化于一体的"世界管理 / Streaming 框架"。
兼容性

World Streamer 2 的工作原理
为了更好理解 WS2 的行为,下面是其典型运行流程/机制 --- 也便于在项目中正确设定。
-
编辑 (Work Scene / Editor-time)
- 在 Unity 编辑器中,开发者创建一个大的世界 (地形 + 建筑 + 道具 + 物件 + 树 + 光照 + NavMesh 等)
- 启动 WS2 的 Scene Manager / Terrain Manager / Streaming Layers 面板,对世界进行"切割 (split)" ------ 把世界拆成多个 tile / chunk / sub-scene。这个过程会遍历 world 中的所有 GameObject,根据其世界坐标 (x, z, optionally y) 分配到对应 tile。最后生成多个 sub-scenes,每个 sub-scene 对应一个 tile 区域。 ([varden.ee][4])
- 同时定义多个 Streaming Layers(如 Terrain, Buildings, Props, SmallObjects, LowPolyFarObjects, Interiors...),并设定每层的 "Size (X/Z) / Split Y (可选) / 优先级 / 加载距离 / 同步层 (sync) / GameObject Name Prefix (用于标识哪些对象属于这一层)" 等参数。 ([varden.ee][4])
- 如果世界中有建筑 / 室内 / 房间 /洞穴,需要为 interior 内容(室内物件 & 灯光等)建立"root object + collider trigger (围绕建筑 / 房门 /楼层)" ------ 当玩家靠近 /进入 collider 时触发 interior sub-scene 的加载。 ([varden.ee][4])
- (可选)为远景 (远离玩家但仍可能可见) 生成低多边形 mesh / impostor /简化 terrain 或远景树 /植被,以节省渲染开销 (Ring Streaming / Low-Poly Background) 。 ([incern][1])
-
构建 (Build Settings / Build)
- 将所有生成的 sub-scenes (tile / chunks) 自动加入 Unity 的 Build Settings,以便打包。 WS2 提供 "Add scenes to build settings" 一键功能。 ([varden.ee][4])
-
运行 (Game Scene / Runtime Streaming)
- 在主玩家 scene (Game Scene) 中添加 WS2 的 Streamer Prefab (通常为
_Streamer) ------ 这是运行时管理加载 / 卸载 / 流式切换的核心组件。 ([varden.ee][4]) - 当游戏运行时,系统根据玩家 (摄像机 / 主角色) 的位置 /视距 /定义的 Streaming Layers / collider triggers 等,决定加载哪些 tiles / sub-scenes / objects / LOD / interiors / far meshes/low-poly replacements。
- 当玩家移动时,加载新 tiles/卸载远离的 tiles;进入 interior collider 时加载室内 sub-scene;离开 interior 时卸载。远景 objects 使用低多边形 mesh / impostor /简化表现以降低渲染消耗。
- 如果地图非常大 / 无限 (world looping)/floating-point 修正系统会对玩家位置 / 世界坐标进行修正,以防止浮点误差累积、物理或渲染 bug。 ([incern][1])
- 在主玩家 scene (Game Scene) 中添加 WS2 的 Streamer Prefab (通常为
这个流程允许开发者在 "编辑 / 构建 / 运行" 三阶段构建一个可流式加载 / 大世界 / 性能可控 / 内存可控的 Unity 游戏。
World Streamer 2 快速入门
以下是一个"最快可见成效 / 最小配置 / 最小世界规模"的快速流程 (Quick Start),适合第一次使用 WS2 的人。
目标:创建一个简单地形 + 几个建筑 + 少量 props 的 world,运行时玩家靠近加载 / 离开卸载,检测性能变化。
步骤 1:获取 & 导入插件
- 在 Unity Asset Store 中购买 /导入 World Streamer 2。
- 若你使用的是 URP / HDRP / Built-in,请根据 README 或 "HD and URP support" 文件夹内说明导入支持包。
- 确保 Unity 版本兼容 (WS2 支持 Unity 2019 / 2020 / 2021 等多个版本) 。
步骤 2:创建你的 World / Work Scene
- 创建一个新的 Scene (例如命名为
WorkScene) - 构建你的地形 (Terrain)、地形纹理、植被 (Tree / Foliage)、建筑 / 环境 /道具 / props /物件 / NavMesh /光照 /天空 /水面等
注意:如果场景非常简单 (仅地形 + 少量建筑 + 少量 props) 就能快速测试流式加载效果。
步骤 3:打开 WS2 的 Scene Manager / Terrain Manager
在 Unity 菜单栏,选择 Tools → Nature Manufacture → World Streamer → Scene Manager 打开面板。 ([varden.ee][4])
步骤 4:对地形进行切割 (Split Terrain)
- 切换到 Terrain Manager → Terrain Splitter 选项卡。
- 设定
Split Size(例如把一个较大地形分割为 2×2,4×4,视地形大小与性能需求而定)。 - 推荐勾选 "Add terrain culling" (启用地形剔除 / culling) ------ 这样视距之外 /摄像机看不到的地块会被自动卸载 /不渲染。
- 点击 "Split Selected terrains" (或 Split all) 开始分块。注意:如果地形/资源很多,分块操作可能较耗时 (编辑器中会 "卡住"一段时间) 。 ([varden.ee][4])
⚠️ 提示:如果你项目中使用第三方地形插件 (如 MicroSplat, Digger, Gaia Pro 等),建议先暂停 /禁用地形插件相关功能,完成 split 后再重新应用 --- 因为切割地形可能破坏第三方地形的数据结构 / 纹理设置。 ([varden.ee][4])
步骤 5:创建 Streaming Layers
-
在 Scene Manager 面板切换到 "Streaming Layers" 选项卡。
-
点击 "Add Layer" 创建你需要的 layer。例如:
- TerrainAndTrees (地形 + 树 + 地表)
- LowPolyTerrainMeshes (用于远景 Low-poly 地形)
- Buildings (建筑)
- Props (中型 /小型道具)
- SmallObjects (小道具 /装饰)
- Interiors (建筑内部 / 房间 Interiors)
-
对每个 layer 设置参数:包括 Size X / Size Z (即该 layer tile 的尺寸 / 范围)、Split Y (可选,若需要垂直分割) 、GameObject Prefix (用来标记哪些对象属于该 layer)、Priority (加载优先级) 、Max Parallel Scene Loading (同一时间最多同时加载多少 sub-scene) 、Load/Unload Distances (加载 / 卸载触发距离) 等。 ([varden.ee][4])
-
例如:地形 tile size = 500m × 500m,Buildings tile size = 500m × 500m,Props tile = 200m,SmallObjects tile = 100m。优先级按重要性 (terrain highest, then buildings, then props, then small) 排列。
步骤 6 (可选):设置远景 / 低多边形 (Low-poly) / LOD / 环境替换 (Ring Streaming)
- 对于远景、远离玩家但仍可能可见的地形 / 树,可以启用 Low-poly 替换 (low-poly background meshes / impostors),减少远景渲染开销。
- 在对应 layer (LowPolyTerrainMeshes 或远景树 layer) 中启用 ring-streaming /远景替换选项。设置 far-distance threshold (例如超过 1000m) 后切换为 low-poly。 ([incern][1])
步骤 7:如果有建筑 / 室内 /洞穴 /房间 ------ 配置 Collider-trigger-based interior streaming
- 把建筑 /房屋内部 (家具 /室内装饰 /灯光 /碰撞 /室内物件) 放到一个 root transform 下 (例如
House01_InteriorRoot)。 - 在房屋外部 (门前 /入口 /楼梯 /房间切换点) 放置一个 Collider (trigger) (例如
InteriorTrigger_House01) ,用于玩家进入时触发 interior 加载。 - 再次打开 Scene Manager → Streaming Layers,选择 "Generate Scenes from colliders only" (为 collider-trigger 自动生成 interior sub-scenes) 。这样每个 interior 的内容都会被打包成单独 sub-scene,仅在触发时加载 / 卸载。 ([varden.ee][4])
步骤 8:添加所有 sub-scenes 到 Build Settings
点击 WS2 Scene Manager → "Add scenes to build settings" 按钮,将所有生成的 terrain tiles / chunks + interior sub-scenes + streaming layers对应 scenes 自动添加到 Unity Build Settings。否则打包后 sub-scenes 无法加载。 ([varden.ee][4])
步骤 9:创建 Game Scene / 主场景 + 添加 Streamer Prefab
- 新建一个 "Game Scene"(例如
GameScene_Main)------ 这是最终运行时的主 scene。 - 将 WS2 的
_Streamerprefab 加入场景 (作为单例 /管理器对象),并在其 Inspector 中填写必要参数 (player transform / camera transform / initial tile / streaming layers / load radius / unload radius / LOD /远景替换 / interior streaming / floating-point fix / world looping 等,根据项目需求设定)。 ([varden.ee][4]) - 保存 scene。此后,这个 Game Scene 将负责运行时基于玩家位置动态 load / unload 子 scene / tiles / interiors / LOD 等。
步骤 10:运行并测试
- 运行 Game Scene,控制玩家(或摄像机)移动到世界中。
- 检查:当玩家移动到一个 tile, building, room / interior /碰撞 trigger 时,是否正常加载对应 sub-scene;当玩家远离时,是否卸载;远景是否切换为低多边形表现 (if enabled);性能 (FPS / CPU / GPU / RAM / VRAM) 是否稳定。
- 若一切正常,你就得到了一个基本可用的"流式 / 分块 / 动态加载世界"。
这样,你就完成了从"空白项目 + 几个地形 /建筑 /物件 +少量 props"到"可运行 / 可流式 / 分块 /按需加载 / near-infinite / 高性能 world"的完整快速入门流程。
总结与建议
- World Streamer 2 是 Unity 中最成熟、功能最全的大世界 / 流式加载 /地形分块 /资源管理插件之一,非常适合开放世界、沙盒、城市、无限 /循环世界、VR /仿真 /大型地图项目。
- 它提供地形 / tile 分割、多层 streaming、低多边形 / 远景替换、异步加载 / 卸载、floating-point 修正 /无限世界支持、室内 collider-trigger streaming、多场景 /多人编辑支持等丰富功能。
- 想快速入门,可以按本文 "Quick-Start" 步骤操作,从简单地形 + few objects 开始测试,再逐步向复杂世界扩展。
- 真正用好 WS2,需要认真规划资源结构 / sub-scene 划分 / layer / 优先级 / LOD / 远景 /剔除 / interior streaming / lighting / navmesh / physics / build 设置 /性能 profiling 等多个维度。
- 切忌把所有东西塞进一个 tile / sub-scene / layer;也不宜 tile 过大。合理平衡 tile size、对象密度、加载 /卸载频率、资源负载。
- 对于大型 /高复杂度项目 (百万三角 /高分辨贴图 /大量植被 /动态对象 /多人 /VR),WS2 + LOD +远景 / 剔除 / 静态合批 /烘焙 /动态生成 /对象池 /资源打包 /优化管线 是一个整体系统 --- 只有结合这些,才能发挥 WS2 的全部价值。
建议:如果你的项目目标是"大世界 / 沙盒 / 探索 /开放地图 /城市 /VR /仿真 /模拟" ------ 就认真投入时间学习 WS2 + 构建合适资源结构;如果只是几个小场景、小世界,则衡量好收益/成本后决定是否使用。
