多人游戲的關卡切換分為無縫和非無縫。非無縫切換時,客戶端將跟服務器斷開連接,然后重新連接到同一個服務器,服務器則加載一個新地圖。無縫切換不會發生這樣的情況。
有三個函數供我們使用:UEngine::Browse
、UWorld::ServerTravel
和 APlayerController::ClientTravel。
1,UEngine::Browse
非無縫切換,切換到目標地圖前將斷開跟客戶端的連接。
2,UWorld::ServerTravel
只能在服務器調用,將服務器跳轉到新地圖,所有連接的客戶端會跟隨,服務器會為所有已連接的客戶端調用 APlayerController::ClientTravel。
3, APlayerController::ClientTravel
在客戶端調用會轉移到新的服務器,如果從服務器調用,則使特定客戶端轉移到新地圖。
使用無縫切換:通過UGameMapsSettings::TransitionMap配置一個過渡地圖, AGameMode::bUseSeamlessTravel設置為true。
藍圖中的openlevel,實際上調用的是ClientTravel,這會中斷所有連接,使用命令行調用servertravel不會中斷這些連接,例如:servertravel /Game/Maps/Level01.
這里發現UE4的一個Bug,在PIE運行游戲時調用servertravel會沒有效果,在打包后的游戲中運行一切正常。