多人游戏中的关卡切换 您所在的位置:网站首页 UE4关卡切换 多人游戏中的关卡切换

多人游戏中的关卡切换

2023-12-22 00:58| 来源: 网络整理| 查看: 265

Choose your operating system:

Windows

macOS

Linux

参见

客户端-服务器模式

Gameplay框架

本页面的内容

无缝与非无缝切换

`UEngine::Browse`

`UWorld::ServerTravel`

`APlayerController::ClientTravel`

启用无缝切换

无缝切换流程

无缝切换中的存留 Actor

无缝与非无缝切换

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

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

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

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

初次加载地图时

初次作为客户端连接服务器时

想要终止一个多人模式游戏并启动新游戏时

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

`UEngine::Browse`

就像是加载新地图时的硬重置。

将始终导致非无缝切换。

将导致服务器在切换到目标地图前与当前客户端断开连接。

客户端将与当前服务器断开连接。

专用服务器无法切换至其他服务器,因此地图必须存储在本地(不能是 URL)。

`UWorld::ServerTravel`

仅适用于服务器。

会将服务器跳转到新的世界/场景。

所有连接的客户端都会跟随。

这就是多人游戏在地图之间转移时所用的方法,而服务器将负责调用此函数。

服务器将为所有已连接的客户端玩家调用 APlayerController::ClientTravel。

`APlayerController::ClientTravel`

如果从客户端调用,则转移到新的服务器

如果从服务器调用,则要求特定客户端转移到新地图(但仍然连接到当前服务器)

启用无缝切换

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

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

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

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

无缝切换流程

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

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

转移到过渡关卡

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

转移到最终关卡

无缝切换中的存留 Actor

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

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

GameMode actor(仅限服务器)

通过 AGameModeBase::GetSeamlessTravelActorList 额外添加的任何 actor

拥有一个有效的 PlayerState (仅限服务器)的所有控制器

所有 PlayerControllers (仅限服务器)

所有本地 PlayerControllers (服务器和客户端)

通过 APlayerController::GetSeamlessTravelActorList (在本地`PlayerControllers`上调用)额外添加的任何 actor



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有