返回文章
月武的博客技术新闻

UE5世界分区功能笔记

ue post logo

目录

罗传月武(YueWu)

作者

罗传月武(YueWu)

专注游戏开发和Web技术。

2025年3月24日更新时间: 2026年4月14日

数据层

数据层是UE5新功能,可以代替子关卡,可以实现同一个地方,不同条件下(通过蓝图控制、比如玩家有某个任务、或者开启某种玩法),整个场景都可以变掉。

一般Gameplay游戏运行时会变动的东西才会放到数据层,纯模型场景不需要放置在数据层。

地形无法使用数据层。

数据层可以嵌套组织。

一个Actor可以放置在多个数据层。

每Actor一个文件

UE5新功能,不再把关卡里的所有内容全部放到一个关卡里,而是关卡里的每一个Actor都以一个文件进行存储(文件命名、管理由虚幻自动化处理)。

这样用于解决一个很大的地图,里面只改一个actor的某个参数、就需要提交整个地图、非常适合多人协同地图编辑、同时也优化了日常开发更新流程。

世界分区中的Actor

这些截图都是截的Actor的细节面板。

数据层

每个Actor的细节面板可以配置Actor在哪个数据层、也可以通过数据层Outliner方便加入。

RuntimeGrid

每个Actor细节面板的世界分区部分,可以指定Actor在运行时属于哪一个“运行时网格”上。如果填None,则使用默认的(后面会讲。)


IsPatiallyLoaded

这个勾勾用来决定该Actor放在启用世界分区的地图中时的加载机制。一般是打勾的。

打勾:

如果Actor不在任何数据层里,那么会根据玩家距离进行加载。

如果在数据层,那么所属的任意一个数据层被启用后就会加载。

但实际情况是,即便数据层启用了,打勾后,还是会遵守距离加载的原则。

不打勾:

如果Actor不在任何数据层里,那么就会加载(意味着永久加载,尽可能避免。)

如果Actor在数据层,那么所属的任意一个数据层被启用后就会被加载。

简单来说,数据层优先级更高。

运行时网格定义

前面讲到了Actor如何指派到不同的运行时网格,这里讲如何定义运行时网格。

编辑器下的世界分区面板可以以512mx512m固定单位来加载要编辑查看的区块。

但游戏运行时使用另外一套运行时网格来处理单位的加载,这另外一套运行时网格就叫“RuntimeGrid(运行时网格)”

RuntimeGrid在每个世界分区的地图的WorldSettings部分定义。

如上图所示,默认有一个MainGrid,它的大小是256m,加载范围是768m。如果Actor没有被指定到任何数据层,就会使用跟这个MainGrid。

但我还添加了一个其他的网格:Gameplay网格大小是10米,加载范围是20米,颜色是青色。

如上图所示,我给一个立方体设置在了Gameplay格子,如果玩家相机距离立方体所在格子超过20米,那么立方体就会被卸载。

废弃项

关卡蓝图

关卡蓝图官方已经不推荐再使用,任何被关卡蓝图引用的Actor会永久加载

替代方案:

如果非要引用,建议使用一个Actor(暴露变量),然后在细节面板里手动选择引用。这种相互引用的Actor在打包的时候会被打包在同一个关卡中!

LevelBounds

关卡边界是以前每个关卡都会根据关卡内Actor摆放而自动生成的一个能框住所有关卡内Actor的盒子。现在已经被弃用。智能对象依赖LevelBounds查询关卡内的可交互对象,关卡蓝图游戏地点依赖LevelBounds判定某个Actor是否在关卡内。

关卡蓝图游戏地点

不兼容项

由笔刷构建的Actor不会自动被世界分区所管理和流送加载,后续都要转化成StaticMesh。