多人游戏中的关卡切换 | 您所在的位置:网站首页 › UE4关卡切换 › 多人游戏中的关卡切换 |
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 实验室设备网 版权所有 |