通过关卡流可以在需要的时候动态加载关卡,不需要的时候卸载,降低内存使用率,构建大型场景。
关卡流的简单示例
通过简单的示例了解关卡流的用法。
1、新建两个关卡,在关卡里分别放一个 "Level1" 和 "Level2" 的文本,保存文件名为 StreamLevel1 和 StreamLevel2
2、新建一个空关卡,并打开 Levels 窗口
3、在 Levels 界面,将 StreamLevel1 和 StreamLevel2 拖入 PersistentLevel 下,作为当前关卡的 子关卡,如图所示,可以看到拖进来的两个关卡
4、在子关卡上右键,弹出的菜单可以对子关卡进行一些操作,其中 ChangeStreamingMethod 可以 改变关卡的载入方式,
- 默认是 Blueprint ,也就是通过蓝图来加载,
- AlwaysLoaded 会在游戏启动时就载入,能同时看到所有关卡。
如果要在编辑器中隐藏子关卡,可以将对应的子关卡前面的眼睛点一下就可以了。
关卡蓝图代码加载
5、打开关卡蓝图,写入如下蓝图代码,这段代码在用户按下 空格键 时判断 StreamLevel1 有没有打开,如果没有打开就使用 LoadStreamLevel 打开,并使用 UnloadStreamLevel 卸载StreamLevel2(即使没打开过也不会出错),否则打开 StreamLevel2 并卸载StreamLevel1,结果就是每按下空格键就会在 StreamLevel1 和 StreamLevel2 之间切换。
LevelStreamingVolume 加载
6、以上是通过蓝图代码加载关卡流,还可以通过 LevelStreamingVolume 自动加载,在用户进入该体积内,对应的关卡就会载入。调整上面两个子关卡位置,并在当前关卡中拖入两个 LevelStreamingVolume 放到合适的位置,这里还放了两个 圆锥体 作为位置标识。
7、在关卡界面点击 Summons level details 打开 关卡详情窗口(Level Details)
8、在 关卡详情页面 添加 Streaming Volumes 项,选择关卡中对应的关卡流体积,Inspect level 就可以切换子关卡
9、运行后角色走到体积处,子关卡就会自动加载出来了
注意事项
附1
如果要在当前关卡编辑子关卡,可以使用 MakeCurrent,后面的编辑就是针对这个子关卡了,比如拖入物体就是拖到子关卡中
附2
OpenLevel 也用于动态加载关卡,但是会卸载当前关卡,而关卡流不会卸载当前关卡
附3
下图是其他一些与关卡相关的节点,LoadLevelInstance 能打开多个关卡实例,并设置关卡位置和旋转,GetCurrentLevelName 用于获取当前关卡名。