关卡实例化功能是一种基于关卡的机制,能让普通场景采用世界分区系统。它可以用于使用以下功能来创建复杂的流送策略:
-
通过特殊设计的Actor,实现在关卡实例化时包含变换信息。
-
在运行时流送同一关卡的多个实例。在之前版本的虚幻引擎中这是无法实现的。
-
在一个子关卡中额外嵌套其他子关卡。
例如,你可以使用世界分区系统在地图中生成大量Actor。假如某些Actor需要专门设置和复用,关卡实例还提供了一种能够联系情境的编辑流程,可以取代旧的关卡视图。
尽管你可以在不使用世界分区的情况下使用关卡流送,但离开了世界分区系统中的主场景,关卡实例不会自动实现流送管理或采用任何流送策略。
创建关卡实例
新的关卡实例是根据选中的Actor生成的;它可以在 视口(Viewport) 或 世界大纲视图(World Outliner)中创建。
选中所有的Actor后,右键点击其中一个,打开上下文菜单,然后选择 根据选择进行创建(Create from selection)。
你将看到一个对话框,其中包含以下设置:
设置 |
说明 |
---|---|
类型 |
关卡实例的类型:
|
外部Actor |
允许外部Actor使用"一Actor一文件"系统。如需更多信息,请参见One File Per Actor文档。 |
枢轴点类型 |
关卡实例将采用的枢轴点类型:
|
枢轴点Actor |
如果Actor被选择作为枢轴点,请使用此下拉菜单来选择哪个Actor将作为关卡实例的枢轴点。 |
选择设置后,系统将要求你保存新的关卡实例。
此流程将在关卡中创建新的 ALevelInstance Actor,代替之前选中的Actor。此Actor表示刚刚创建的关卡,应用至此Actor的所有变换都将应用至关卡实例。
在 世界大纲视图(World Outliner) 中,关卡Actor将显示为灰色,因为当前无法选择或编辑。
你可以将 ALevelInstance Actor拖动到你的关卡中,并在 细节(Details) 面板中将一个 .umap
文件指定给它。
你可以仿照常规的关卡创建模板,在虚幻引擎的 .ini
文件中创建关卡实例模板。方法是将以下内容添加到项目的 DefaultEditor.ini
文件:
[/Script/LevelInstanceEditor.LevelInstanceEditorSettings]
+TemplateMapInfos=(ThumbnailTexture=Null,Map="/Game/Maps/Tools/TM-Template")
打包型关卡实例
打包型关卡实例(Packed Level Instance)会设法把关卡中的静态网格体尽可能合并成少量的静态网格体实例。
打包型关卡实例分为两种:
-
打包型关卡实例(Packed Level Instances):打包流程会在ALevelInstance Actor的位置创建一个打包关卡实例。
-
打包型关卡实例蓝图(Packed Level Instance Blueprint):打包流程将创建一个可以在蓝图中引用的关卡实例。
Actor和组件若不是静态网格体,将不会包含在打包流程中,而且将在源关卡中保持独立。
打包关卡实例不会更改在使用关卡时的编辑工作流。
打包型关卡实例目前属于验性功能,可能会在虚幻引擎的后续版本中改动或删除。
编辑关卡实例
你可以在具体的上下文中,通过视口(Viewport)或细节面板(Details panel)编辑关卡实例。
如上所示,可以通过以下方式打开编辑模式:
-
在视口中选择关卡实例。
-
右键点击打开上下文相关菜单。
-
在菜单的关卡实例(Level Instance)部分,将鼠标悬停在编辑(Edit)选项上,选择你要编辑的关卡。
此外,还可以从细节面板(Detail Panel)打开编辑模式:
选择你希望编辑的关卡实例,然后在 细节(Details) 面板中点击编辑(Edit)按钮。
在运行时流送关卡
嵌入模式
在使用嵌入模式时,使用了 一Actor一文件系统(One File Per Actor,OFPA) 的关卡实例将会被废弃,它们的Actor将会在运行时添加到世界分区网格。这是默认的运行时模式,也是建议的关卡内容流送方法。这让关卡实例仅在编辑器中存在。
在使用嵌入模式时,一些不使用OFPA的Actor将会在运行时丢失。例如,嵌入的关卡实例的AWorldSettings object在运行时不存在,因为这是非OFPA Actor。
你应该避免依赖这种方法,或在需要时使用关卡流送模式。
关卡流送模式
不使用OFPA的关卡实例无法嵌入到世界分区系统的网格中,并且会在运行时使用标准的关卡流送。这意味着,ALevelInstance Actor通过自身关联的世界分区运行时单元加载时,它将加载关联的关卡。
此关卡流送的运行时开销很高,因为流中添加了更多的关卡。不建议使用采用此模式来流送大量关卡,因为性能开销会很大。
结合使用嵌入模式和 世界分区数据层功能(World Partition: Data layers),你可以有效估计出能为动态加载关卡预先准备哪些功能。
数据层
在使用嵌入模式或关卡流送模式时,关卡实例支持 世界分区的数据层功能(World Partition: Data layers)。关卡实例中包含的Actor将从ALevelInstance Actor继承数据层。