前言
在过去,创建大世界地图主要是使用 WorldComposition,开发者手动将世界分割为子关卡,然后运行时由关卡流送系统来加载和卸载关卡。其中一个缺点是多个开发者可能在编辑同一个关卡时出现冲突。
而在UE5中,有了WorldPartition,不再需要创建子关卡了。同时与之配合的 一Actor一文件(One File Per Actor) 也减少了开发者之间的编辑冲突。
本篇将对 WorldComposition 进行些简单的尝试。参考资源除了官方文档外还有UE5 World Partition / Getting Started Tutorial - YouTube。
0. 在项目设置中启用WorldPartition
当打开关卡的WorldSettings面板时,可以看到Enable World Partition是灰色的。这也许说明当前并不支持单独让个别关卡启用WorldPartition。
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 要想启用WorldPartition,需要在项目设置中勾选:
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 之后当新创建关卡时,就可以在WorldSettings面板中看到启用了WorldPartition。
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 1. 在WorldPartition窗口中加载网格
新建一个关卡:
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 保存关卡。
但是再次打开这个关卡时,会发现之前的地板不见了:
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 这是因为地板所属的网格并未被加载,因此地板也没被加载
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 打开WorldPartition窗口
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 可以选择多个网格并右键加载他们。
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 加载后便可以再次看到地板了:
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 2. Actor的“网格放置”选项
每个Actor在detail面板都可以设置自身的网格设置 :
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 三个选择效果为:
设置 | 作用 |
边界(Bounds) | 将Actor放置在所有与其边界体积(bounds volume)相交的网格单元中。 |
位置(Location) | 将Actor放置在包含Actor中心点的网格单元中。 |
始终加载(Always Loaded) | 始终加载Actor。 |
默认是“Location”。
为了测试,现在将地板改为“Always Loaded”,这样不管怎么样都会被加载。
3. 预览网格单元
当前的地板相对于网格单元过小了。为了预览可以将其缩放的XY都改为100。
在WorldSettings中,勾选Preview Grids可以预览网格单元。
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 修改网格单元尺寸可以实时地看到划分的变化:
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 (注意:此处预览的网格和WorldPartition窗口中加载的网格并不一样,待后续研究)
4. 运行时的流加载
为了测试,在网格上放一些几何体:
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 点击Play运行后,在控制台输入
wp.Runtime.ToggleDrawRuntimeHash2D
即可预览网格的加载情况:
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载 移动人物,可以看到远处的圆锥所属的网格在到达加载范围后被加载:
简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载