虚幻引擎(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关卡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值