|
过去,构建大型地图需要开发者手动将地图划分成多个子关卡,然后在玩家穿越场景时通过关卡流送系统来加载和卸载关卡。这种方法经常会导致多个用户共享文件时出现问题,而且开发者也难以同时查看整个开放世界。
视频教学
世界分区 关卡实例 关卡流送
世界分区系统(World Partition)是一种全新的数据管理系统,它基于距离进行关卡流,能够为大型开放场景提供一个完整的管理方案。该系统将你的场景保存在一个被划分成多个网格单元的单一持久关卡中,消除了之前版本中需要将大关卡划分成多个子关卡的需要。同时,系统还为你提供一个自动流送系统,能根据与流送源的距离加载和卸载这些网格单元。
世界分区系统用到了以下这些系统:
一文件一Actor(One File Per Actor)
数据层(Data Layers)
关卡实例化(Level Instancing)
HLOD
世界分区转换命令
你可以将现有的场景转换为世界分区系统。可以通过 世界分区转换(WorldPartitionConvert) 命令来完成。
1 在Windows中,打开一个命令提示窗口。
2 在窗口中,导航到UE4Editor.exe文件的位置。例如:- C:Program Files\Epic Games\UE_4.26\Engine\Binaries\Win64
复制代码
3 接下来,在命令开头写上将运行命令集的.exe文件的名称,也就是 UE4Editor.exe。
4 添加命令名称和以下参数:
- -run=WorldPartitionConvertCommandlet mapname opti哔~ -AllowCommandletRendering
复制代码
其中 mapname 是你的地图名称。
5 按下 回车键,命令就会转换项目。
以下是可选参数:
选项 | 作用 | -SC去掉这些字CProvider=[None|Perforce|...] | 指定使用哪个版本控制提供商。 | -Verbose | 显示详细日志记录。 | -Conversio去掉这些字nSuffix | 将 _WP 后缀添加到转换后的地图上。当你因为测试目的需要转换关卡时,可以这样设置。这样就可以保持原有关卡不变。 | -DeleteSourceLevels | 转换后删除原有关卡。 | -ReportOnly | 报告在转换过程中执行哪些操作,但不做转换。 | -GenerateIni | 为该地图生成一个默认的ini转换文件。不做转换。 | -SkipStableGUIDValidation | 跳过不稳定的Actor GUID验证;包含不稳定Actor GUID的关卡在多次转换时将出现不同的转换输出。重新保存关卡可以解决这个问题。 |
你可以同时使用一个默认的转换ini以及转换命令,以便改变转换设置。ini文件需要和你的地图文件位于同一文件夹下,文件名与你的地图名相同,但使用ini后缀。例如,为 "FirstPersonExampleMap.umap" 编写的ini文件的名称应该是 "FirstPersonExampleMap.ini"。
下面是一个默认转换ini文件的例子:
- [/Script/UnrealEd.WorldPartitionConvertCommandlet]
- EditorHashClass=Class'/Script/Engine.WorldPartitionEditorSpatialHash'
- RuntimeHashClass=Class'/Script/Engine.WorldPartitionRuntimeSpatialHash'
- LevelsGridPlacement=(("/Game/Maps/Highrise_Audio", Bounds),("/Game/Maps/Highrise_Collisi哔~_Temp", Bounds),("/Game/Maps/Highrise_Gameplay", Bounds),("/Game/Maps/Highrise_Lights", Bounds),("/Game/Maps/Highrise_Vista", AlwaysLoaded))
- HLODLayerAssetsPath=
- DefaultHLODLayerName=
- [/Script/Engine.WorldPartitionEditorSpatialHash]
- CellSize=51200
- WorldImage=None
- WorldImageTopLeftW=(X=0.000000,Y=0.000000)
- WorldImageBottomRightW=(X=0.000000,Y=0.000000)
- [/Script/Engine.WorldPartitionRuntimeSpatialHash]
- Grids=(GridName="MainGrid",CellSize=3200,LoadingRange=25600.000000,DebugColor=(R=0.500000,G=0.500000,B=0.500000,A=1.000000))
复制代码
蓝图支持
在世界分区系统中,蓝图类和关卡蓝图都能得到支持。不过,推荐使用蓝图类,因为关卡蓝图引用过的所有Actor都会被标记为"始终加载"。
对采用划分系统的场景进行测试
调试以及运行时重载
系统提供了多个控制台命令,可用于在运行时调试某个世界分区世界。
命令
| 作用 | wp.Runtime.ToggleDrawRuntimeHash2D | 是否显示世界分区运行时哈希(runtime hash)的2D显示。 | wp.Runtime.ToggleDrawRuntimeHash3D | 是否显示世界分区运行时哈希(runtime hash)的3D显示 | wp.Runtime.ShowRuntimeSpatialHashGridLevel | 在显示世界分区运行时哈希时,选择显示哪个网格级别。 | wp.Runtime.ShowRuntimeSpatialHashGridLevelCount | 选择在显示世界分区运行时间哈希时要显示多少个网格级别。 | wp.Runtime.ShowRuntimeSpatialHashGridIndex | 在显示世界分区运行时哈希时只显示一个特定的网格。无效的索引将显示所有。 | wp.Runtime.RuntimeSpatialHashCellToSourceAngleContributionToCellImportance | 数值介于0到1之间,可用于调节"角度"对于单元重要性的贡献。该角度为"流送源至单元格"向量和"流送源正向"向量之间的角度。角度越接近0,对单元格重要性的贡献越小。 | wp.Runtime.OverrideRuntimeSpatialHashLoadingRange |
设置运行时加载范围。接受以下参数:
-grid=[index]: 你要影响的运行时网格。
-range=[override_loading_range]: 设置新的运行时加载范围。
| wp.Runtime.MaxLoadingLevelStreamingCells | 可以限制并发加载的世界分区流送单元的数量。 | wp.Runtime.HLOD 0 | 通过wp.Runtime.HLOD在场景中不显示HLOD。 |
|
|