多人游戏中的关卡切换

本页面的内容:

无缝与非无缝切换

UE4 中主要有两种转移方式:无缝和非无缝方式。两者的主要区别在于,无缝转移是一种非阻塞(non-blocking)操作,而非无缝转移则是一种阻塞(blocking)操作。

当客户端执行非无缝转移时,客户端将与服务器断开连接,然后重新连接到同一服务器,而服务器将准备新的地图以供加载。

我们建议 UE4 多人模式游戏尽量采用无缝转移。这样做通常可以提供更流畅的体验,同时避免重新连接过程中可能出现的问题。

有三种情形中必然产生非无缝转移:

有三个用来驱动转移的主要函数:UEngine::BrowseUWorld::ServerTravelAPlayerController::ClientTravel。在确定使用哪个函数时,您可能会感到有些困惑,所以请遵循下面的准则:

UEngine::Browse

UWorld::ServerTravel

APlayerController::ClientTravel

启用无缝切换

要启用无缝切换,您需要设置一个过渡地图。这需要通过 UGameMapsSettings::TransitionMap 属性进行配置。该属性默认为空,如果您的游戏保持这一默认状态,就会为过渡地图创建一个空地图。

之所以存在过渡地图,是因为必须始终有一个被加载的世界(用于存放地图),所以在加载新地图之前,我们不能释放原有的地图。由于地图可能会非常大,因此让新旧地图同时存放在存储器内绝对是个坏主意,这时就需要过渡地图来帮忙了。

现在,我们可以从当前地图转移到过渡地图,然后可以从那里转移到最终的地图。由于过渡地图非常小,因此在“中转”当前地图和最终地图时不会造成太大的资源消耗。

设置好过渡地图后,您需要将 AGameMode::bUseSeamlessTravel 设置为 true,这样就可以实现无缝切换了!

无缝切换流程

下面是执行无缝切换时的一般流程:

  1. 标记出要在过渡关卡中存留的 actor(更多信息请见下面)

  2. 转移到过渡关卡

  3. 标记出要在最终关卡中存留的 actor(更多信息请见下面)

  4. 转移到最终关卡

无缝切换中的存留 Actor

在使用无缝切换时,可以将(存留) actor 从当前关卡带到新的关卡。这适用于一些特定的 actor,如道具栏物品和玩家等。

默认情况下,这些 actor 将自动存留: