一般来说我们在UE4的 一个game model只能绑定一个关卡,在打包的时候我们也只能选择一个默认游戏地图,但是在现实的开发工程中我们会经常遇到切换关卡的需求。所以UE也提供了几种加载关卡的方式。
我发现有一遍写的很好的关于UE4加载关方法的文章,里面有些方法我也是参考这里面的。
这是地址:
里面总结了UE4三种加载关卡的方式
https://blog.youkuaiyun.com/qq_25385775/article/details/53462956
一. 通过使用LevelStreamingVolume的方法:
通过Modes窗口下的Volumes找到LevelStreamingVolume,拖动到编辑器中让它覆盖住两个Level,调节LevelStreamingVolume的StreamingUsage属性(比如有加载后锁定,加载,加载后显示等)。
当Pawn进入到这个LevelStreamingVolume后关卡就会对应的加载,其实有点类似于碰撞盒体触发加载。
二. 通过使用BluePrint的方法:
Blueprint:
使用蓝图控制加载加载关卡,流关卡加载和卸载通常用的节点就那么几个
1.OpenLevel
一开始使用了一个OpenLevel的接口。
(1) 在蓝图中,直接搜索,拖拽出来即可,一般情况下只需要填一个参数:关卡的名称。不需要带路径。
缺点:如果关卡比较复杂,加载所费时间较多,open level函数会阻塞进程,如果之前有加载动画在播放的话,当执行open level函数时,所有进程都停止

2 load stream level 流关卡加载:

Level Name为需要加载的关卡名(必须在Level中添加进去,没有添加的关卡是无效的,而且必须要加载在子关卡里面)
Make Visible After Load为加载完毕后是否显示(预加载的时候不勾此选项,在需要的时候再显示出来)
Should Block on Load为是否加载时允许碰撞
Completed后的连接的节点会在关卡完全加载完毕后执行,可以利用这种特性制作加载界面
流关卡卸载
特别要注意的是LoadStreamLevel节点需要在MakeVisibleAfterLoad打勾,不然不会显示的。第二个暴露变量ShouldBlockonLoad打上勾会,不会被UnloadStreamLevel节点卸载。还有要在Leves编辑器中把修改动态加载方法中的[ 总是加载]改成[ 蓝图]喔,不然通过Blueprints无法控制动态加载的。
流关卡加载方式:
通常作为子关卡加载时我们通常使用的Always Loaded,
但是作为动态加载的关卡时,我们会选择Blueprint,
在Blueprint下,关卡只会在编辑器中默认显示,在运行时所有选择了blueprint加载方式的关卡默认都是不加载的
注意:如果你要加载的关卡比较多,那么可以选择流关卡加载方式,将子关卡放在一个空的关卡中,换而言之,我们需要把我们要在游戏中加载的关卡放在一个空的关卡中作为子关卡,用空的关卡做为主关卡。如果我们不用空的关卡做主关卡,那么我们在切换关卡的时候我们会发现,会出现关卡重叠。
如图所示:

三. 通过c++代码的方式加载
在需要切换动态加载关卡的时候,调用[UGameplayStatics::LoadStreamLevel]函数来加载想要使用的关卡。
大概流程是创建一个FStreamLevelAction,这个Action回去读暴露参数的包遍历所有Level关系找到指定关卡,然后ActivateLevel这个关卡激活的时候会有加载或者卸载关卡。
本文详细介绍了UE4中三种关卡加载方法:LevelStreamingVolume、Blueprint和C++代码控制。通过LevelStreamingVolume利用体积进行触发加载,Blueprint通过节点实现流关卡加载和卸载,并注意ShouldBlockOnLoad的设置。C++代码中使用UGameplayStatics::LoadStreamLevel函数实现动态加载。在实际应用中,需注意避免关卡重叠和选择合适的加载方式。
2387

被折叠的 条评论
为什么被折叠?



