UE4 World Composition机制
世界场景构成(World Composition) 属于关卡流送的一种,旨在简化大型世界场景的子关卡管理,通过关卡流送的方式读取地块信息,减轻运行压力,从而实现大型世界场景的运行。
与传统关卡管理方式的区别:无需手动将关卡添加到场景中,只需将关卡放置到主地图所在的目录下(可建子目录)。
主关卡(Persistent Level)不存储任何流送信息,通过扫描目录来找到的所有关卡视为流送关卡(Streaming Level)。
每个流送关卡的信息存储在包头中, 使得不用把整个关卡加载到内存中,就能读取这些信息。
使用World Composition管理关卡
开启World Composition
点击Summons World Composition按钮,弹出World Composition面板
注:小地图上的黄色矩形表示安全编辑区域(即虚幻支持的最大编辑范围)。该区域外的关卡会自动隐藏
坐标轴 | 正方向 | Min值 | Max值 |
X | 右 | -1000000(-1百万uu,即:-10km) | 1000000(1百万uu,即:10km) |
Y | 下 | -1000000(-1百万uu,即:-10km) | 1000000(1百万uu,即:10km) |
创建新子关卡,并放置到SubLevels目录中
在创建的子关卡上右键,在弹出菜单执行Load来加载该关卡
注:打开World Composition的地图,默认所有子关卡都是不加载的
将子关卡设为当前关卡,并创建地形
World Composition面板上就可以看到该地形的缩略图(以顶视图的方式)
注1:主关卡(Persistent Level)中地形Actor对象不会显示在World Composition面板上
注2:当前关卡也会显示在World Composition面板的右上角处
注3:子关卡是否加载,是否隐藏,都会在World Composition面板上显示出来
World Composition面板
面板相关操作说明:
操作 |
说明 |
左键单击 拖曳鼠标左键拉框 |
选择地块 |
拖曳鼠标右键 | Pan |
鼠标滚轮 | 放大缩小 |
在World Composition面板中移动地块
选择地块后,就可以拖动鼠标左键来移动地块的位置了
注1:按住Ctrl键来移动关卡,会使用关卡编辑器的对齐设置。
注2:为了精确匹配相邻关卡的无缝拼贴,必须将关卡的边界值设置为整数。
注3:默认情况下,ALevelBounds(关卡边界Actor)会自动调整大小,以包含存在于关卡中的所有Actor。
但是,某些 Actor(如天空盒)的边界框可能会非常大,这会导致世界场景小地图中的关卡拼贴变得非常大。
如果有此类Actor且不希望包含在关卡边界计算中,可以禁用自动关卡边界计算,为ALevelBounds(关卡边界Actor)设置固定的大小。
在World Composition面板中创建地块
注:可将子关卡上设为当前关卡,来让其地形数据在World Composition面板上刷新
运行时的World Composition
使用图层(Layer)来管理关卡的流送距离
图层有流送距离相关信息,把关卡移动到指定图层,意味该关卡的加载距离设置为该图层的流送距离。注:当前视点与关卡LevelBounds最近边界的距离小于该流送距离,就会加载该关卡
每个关卡只能放置在一个图层中。默认情况下,所有关卡被分配给 未分类(Uncategorized) 图层,其加载距离为50000uu(即:500米)。
图层无法删除或编辑,因此如果想更改流送距离设置,可创建具有所需设置的新图层并为其分配对应的关卡。 下次打开关卡时,会自动删除未分配关卡的图层。
注:切到Top视图,拖动中键来测量地块的大小
创建自定义图层(Layer)
点+按钮,来创建名为MyLayer的自定义图层,并将其流送距离设为25000uu
查看关卡WorldLevel1所在的图层和流送距离
注:如果Extent:24000,30000,则表示该关卡的LevelBounds的x方向的半长为24000,y方向的半长为30000
将关卡WorldLevel1移动的MyLayer图层
关卡WorldLevel1移到MyLayer图层后
选中图层来显示隐藏关卡
选中MyLayer图层,在World Composition面板中仅显示放入该图层的关卡 注:按住Ctrl点击,可选中多个图层
运行时关卡Streaming过程
当关卡(ALevelBounds)与摄像机距离超过其流送距离时,会自动卸载关卡
当关卡(ALevelBounds)与摄像机距离小于等于其流送距离时,会自动加载关卡
参考
Getting Started with World Composition | Live Training | Unreal Engine