天天看点

简单尝试UE5的WorldPartition前言0. 在项目设置中启用WorldPartition1. 在WorldPartition窗口中加载网格2. Actor的“网格放置”选项3. 预览网格单元4. 运行时的流加载

前言

在过去,创建大世界地图主要是使用 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. 运行时的流加载