UE4单机游戏的关卡切换 OpenLevel
仅适用于StandAlone(单机)游戏
Absolute选项作用
(资料图片仅供参考)
ListenServer或DedicateServer模式:
服务器执行:服务器正常切换到新关卡,客户端会被切换到ProjectSetting中GameDefaultMap地图
客户端执行:
1)不勾选Absolute
不会切换到新关卡,会重新加载当前关卡
2)勾选Absolute
可正常切换到新关卡
Options作用
如果为空 则切换到新关卡后服务器和客户端都作为单机模式运行 不能通过命令行open IP加入服务器
如果Options输入listen
此时如果把ProjectSetting GameDefaultMap设置为新关卡 则聆听服务器执行OpenLevel 服务器和客户端都会各自切换到新关卡,且互相没有连接
客户端可以通过命令行open IP加入服务器
UE4多人游戏中的关卡切换 ServerTravel
概念科普
一般地图切换(非无缝):会断开连接
无缝切换:不是指流关卡,真正的无缝是指多人游戏时关卡切换客户端不断开与服务器的连接
一般地图切换的几种情况
1.客户端断开链接自行切换地图,服务器地图不变
APlayerController::ClientTravel 未设置IP Absolute=True
等同蓝图:OpenLevel 勾选Absolute
2.客户端断开链接加入新的服务器地图,原服务器地图不变
APlayerController::ClientTravel 未设置IP(或者设置了IP) Relative
等同命令行open 127.0.0.1(假如服务器开在本地)
3.服务器切换地图,客户端跟随服务器切换地图
UWorld::ServerTravel 只设置地图信息
4.客户端,服务器都断开链接,各自切换到自己的新地图
先执行情况1,再执行情况3
注意:在编辑器里面,会有一些比较奇怪的表现。比如,编辑器下ListenServer端执行ServerTravel 后会发现客户端会卡住(丢失控制)。而客户端执行ServerTravel则完全没反应。其实是因为下面的代码,
UEngine::LoadMap()
编辑器的GIsClient属性为true(正常一个DedicateServer一定为false),导致服务器在LoadMap的时候不能正常初始化监听的NetDriver,因此客户端无法与服务器建立连接而一直处于Pending状态。表现上就是客户端角色卡住不动。
解决方法是(UE 4.26):
1)如果在编辑器运行,Playe Mode请选择Standalone Game(独立窗口运行)或开启独立服务器模式,这两种方式无论服务器还是客户端都能正常切换关卡
2)打包后运行若一个作为服务器,另一个为客户端加入游戏,则都能正常切换关卡
如果打包了独立服务器,则所有客户端都可正常切换关卡。
关键词: