文章目录
- 前言
- LevelInstance的使用
- 1.ALevelInstance
- 2.选择Actor创建关卡
- 3.运行时加载LevelInstance
- 总结
上一篇:虚幻引擎(UE5)-大世界分区WorldPartition教程(二)
前言
在制作大关卡时,可能会遇到这样一种情况,就是关卡中的某些Actor会重复出现或者你想单独编辑某区域的Actors,举个例子,关卡中有两片一模一样的森林,很显然,如果在关卡中制作两个这样的森林不科学
在UE5中可以通过一个特殊的Actor即ALevelInstance管理多个Actor,它会被保存为一个关卡文件(即SubLevel),在运行时可以被实例化为多个,即所谓的Level Instancing技术
提示:以下是本篇文章正文内容
LevelInstance的使用
1.ALevelInstance
手动创建一个ALevelInstance蓝图,然后为它指定任意的Level
将该LevelInstance蓝图拖到你想要放的关卡中即可,此时在拖到的关卡中还不能对该LevelInstance的Actor进行编辑,需要点击该LevelInstance的Details面板下的Edit按钮进行编辑,编辑完后提交即可
当然也可以直接指定的关卡
2.选择Actor创建关卡
在当前关卡的Viewport或Outliner选中多个Actor,然后为其创建LevelInstance
这样就将多选的actor合并到一个新的关卡里面了。
提示:LevelInstance可以嵌套多层,也就是说LevelInstance下面还可以有子LevelInstance
还有一点值得注意,LevelInstance和它下面的Actor的是否被保存为外部文件是根据它们所在的关卡决定的,所在关卡为WP关卡,那么默认会保存到外部文件,所在关卡为非WP关卡,可以按照OFPA小节介绍的方法来决定是否将这些Actor保存为外部文件
这个时候会发现这里的LevelInstance 有两个选项,这两种的区别如下:
- LevelInstance,不会合并Actor
- PackedLevelActor,它试图将静态网格的Actor合成成尽可能少的静态网格Actor
比如选中几个静态网格Actor创建PackedLevelActor后,会被合成一个Actor
想具体了解静态网格Actor如何被Packed可以翻一下源码的FPackedLevelActorISMBuilder::PackActors方法
3.运行时加载LevelInstance
在运行时有两种方式加载LevelIntance
- 如果LevelInstance开启了OFPA(即PackageMode为External),它拥有的所有Actor都会被嵌入到当前WP关卡中,这些Actor会被自动划分到Cell中,并且将WP关卡中的LevelInstance这个Actor直接丢弃掉(它只存在于编辑时)
- 如果LevelIntance没有开启OFPA(即PackageMode为Internal),它拥有的Actor不能被嵌入到WP关卡中,LevelInstance这个Actor仍然会保留,当加载LevelInstance这个Actor时会加载它关联的SubLevel
第一种方式是默认的也是推荐的方式,它会将LevelInstance关联的SubLevel中的所有Actor嵌到WP关卡中,然后将它们自动划分到Cell中来流送,第二方式和UE4中的关卡流送机制类似,在流送LevelInstance这个Actor所在的Cell时会将它关联的SubLevel全部加载进来,这可能造成性能问题
具体实现可参见ULevelInstanceSubsystem::UpdateStreamingState
总结
以上就是今天要讲的内容,本文仅仅简单介绍了LevelInstance的使用,Level Instance既方便了编辑时候对某些Actor的重用和生成多实例,同时也方便将UE4的SubLevel接入WP关卡。
下一篇:虚幻引擎(UE5)-大世界分区WorldPartition教程(四)