Bootstrap

UE4流关卡与无缝地图切换总结

目录

一.Level Streaming的使用与注意

  1. 流关卡的使用与注意
  2. 世界构成器 World Composition

二.地图切换流程分析

  1. ClientTravel
  2. ServerTravel
  3. Browse

三.无缝地图切换

  1. 无缝切换流程
  2. 无缝切换时保存Actor
  3. 无缝切换时的一些问题与解决方法

一.Level Streaming的使用与注意

流关卡顾名思义,即关卡数据可以以数据流的形式加载到游戏中,这个过程就像加载其他的角色数据一样,非常平稳,对当前的关卡没有影响。具体的表现效果就是,当你在场景A中向场景B行走的时候,B场景会在你事先指定好的地点(或者其他条件)加载进来,而你感觉不到B场景的加载过程,好像原来B场景就存在一样,这样玩家就会觉得仿佛置身于一个大场景一样。

(注意:你可以把流关卡理解成一种“无缝加载”,但是这与UE里面官方文档里面的无缝加载并不是同一个东西,具体的差异在讲无缝加载时再分析)

1.流关卡的使用与注意

UE4官方文档关于流关卡的使用介绍的已经很详细,我这里只是就部分重要步骤做描述与讲解。
在UE4里面,每一个World里面至少有一个PersistentLevel以及0-N个StreamingLevels。在编辑器里面通过Windows—Levels窗口即可查看。在下面图1-1我们可以看到当前World里面只存在一个Persistentlevel,这个Persistentlevel就是当前我们打开的level。
这里写图片描述

                                      图1-1

这里写图片描述

                                      图1-2

通过Levels窗口我们可以开始创建流关卡了,点击Levels按钮,可以创建新的level或者是添加已经存在的level。对于添加进来的流关卡,我们可以设置其是和persistentlevel一起永久加载(alwaysloaded)还是在自定义条件下再加载。如图1-3
这里写图片描述

                                      图1-3

控制流关卡的加载总体上来说有两种方式,一种是通过关卡流体积控制(LevelStreamingVolume),另一种是通过脚本(代码)逻辑控制。简单描述一下两个方法,第一种,LevelStreamingVolume相当于一个定制的触发器,当玩家摄像机(注意是玩家摄像机)进入LevelStreamingVolume体积内的时候,对应的流关卡就会加载(对应关系是通过下图操作设置的 点击levels旁边的按钮打开leveldetails窗口 inspectlevel找到需要加载的流关卡添加对应的LevelStreamingVolume)。第二种,就更随意了,你代码想怎么写就怎么写,简单的方式就是设一个触发器在玩家进入触发器的时候调用LoadStreamLevel,具体的教程的参考官方文档。
这里写图片描述

                                     图1-4

这里写图片描述

                                      图1-5

2.世界构成器 World Composition

流关卡给我们提供了一个大世界的解决方案,但是实际操作上由于每个level关卡都可能非常大,我们在编辑器里面一点点调整流关卡里面的Actor位置实在是过于麻烦,所以UE提供了世界构成器功能,简单来说就是帮你把N个关卡用拼图的形式拼接成一个大世界地图。
想使用这个功能,首先你需要在当前的WorldSetting里面勾选 Enable World Composition (这个有个小tips,如果当前你的world里面已经添加了子关卡,那么是无法开启该功能的)。当你开启该功能的时候他会弹出一个界面提示你将会把同一个文件夹内的所有level作为当前persistent level的流关卡,点击OK即可。
这里写图片描述

                                  图1-6

这时候新加入的流关卡并没有激活,所以是灰色的。右键该地图选择Load选项,就会把NewMap加入当前的level里面,此时在编辑器里面你就可以看到子关卡的物件了。
这里写图片描述

                          图1-7

这时候有一个问题,你发现无论怎么设置,运行游戏的时候NewMap都会和Persistent Level一同加载到当前的Level里面。这是为什么呢?因为世界构成器默认的加载逻辑就是当玩家距离要加载的关卡满足一定数值时就会加载对应的子关卡。而由于你刚把NewMap加载到当前的World里面,没有设置地图拼图,所以NewMap的默认位置就是当前世界的原点位置,满足默认距离50000(500米),所以一开始运行的时候就会加载进来。
所以接下来,我们要去设置地图拼图。设置完世界构成器之后你会发现level界面多了一个按钮,点击这个按钮就打开了世界构成器的界面。官方文档上长的是这样的(图1-8)
这里写图片描述

                          图1-8

这里写图片描述

                                    图1-9

然而当你满怀激动打开后却发现是这样的(如图1-9)???怎么啥都没有,我有场景的啊,这个箭头是什么意思?不

;