关键词:
Unreal Engine,UE, LevelStreaming,动态,关卡,加载,切换关卡,换地图,子地图,子场景,子关卡,分包加载,动态载入
背景:
游戏中要选地图,如王者荣耀,往往是在大厅中先选玩法顺带一张地图,启动游戏后跳转场景。
这类游戏很多,如20多年前的游戏 红色警戒,反恐精英。
但反恐精英还有一个特别的方法,在当前游戏关卡中直接换关卡。
没错,猜测这是一种“父级关卡不变,动态加/卸载子关卡的技术。”
还有一种卡马克卷轴技术的边走边加载子关卡的技术。
问题:
那么综上 UE引擎将不同游戏场景放在子级中。LevelStreaming如何切换? 有几种方法? 分别什么特点?
答:
三种
方法1
方法1 的具体实现
SwitchLevels是一个多播事件,它的上级由一个RunOnServer事件触发
LoadAndUnLoadSubLevel 是一个对外接口,主要是用来本地刷新子关卡,防止跟服务器不同步
此处用了一个String类型变量CurrentLevelName 记录当前关卡的名字,因为在LoadAndUnLoadSubLevel时,不必传入关卡名
而用一个LevelStreaming类型变量CurrentSubLevel 记录当前关卡(指针)
注意: 此处必须有 bShouldBeLoaded 的两次设置,否则加载出错
如果已经有同名子关卡在了,先关闭bShouldBeLoaded,再加载,最后在开启bShouldBeLoaded
方法2
方法3
如果制作单一子关卡的加载打开,用方法1。诸如赛车游戏,进入游戏主管卡后,玩家切换地图,可以使用方法1。
如果制作超大世界的多地块加载,使用方法2。因为方法2将所有子关卡都预先添加到Level列表中,再开启显示。视觉效果延迟小。
同时使用Level Streaming Volume体积块触发Load和Unload。
此外,超大世界的多地块加载也可以先用方法1提前将子关卡加载到Level列表,然后用方法2显示出来。
题外话 还可以用 Open Level 或 命令行 换主关卡
注意:这是换主关卡的方法,并不能帮我们换子关卡。
如下案例:我有一个MyGameLevel的关卡
我要加载它
以下三种方式均可,推荐用Open Level by Name 和 Open Level by Object Reference