UE4客户端和UE4服务器断线重连思路

这里介绍使用UE4服务器,UE4客户端断连重连机制,参考官方ShooterGame例子开发版下介绍:

启动UE4服务器Bat命令启动服务器

start "S" \..\UnrealEngine-4.20.3-release\Engine\Binaries\Win64\UE4Editor.exe "D:\Shooter\ShooterGame.uproject"  Highrise  Game=ShooterGame.ShooterGame_TeamDeathMatch Port=7777  -server  -log

启动UE4客户端Bat命令连接服务器,可以同时启动几个客户端连接服务器,方便测试断线重连

start "C1" D:\UnrealEngine-4.20.3-release\Engine\Binaries\Win64\UE4Editor.exe "D:\Shooter\ShooterGame.uproject" 192.168.11.169:7777 -Game  -log

UE4引擎,在客户端和服务器断线了,服务器上玩家的Pawn(Character)没有销毁的,同服务器下别的客户端还可以看到断线玩家的Pawn(Character)在 断线地方,做着断线那刻状态,此时服务器里断线玩家Controller一直Possess该Pawn(Character)。所以玩家在断线后,把Controller保存着,玩家使用地址(192.168.11.169:7777)通过GetWorld()->GetFirstPlayerController()->ConsoleCommand等连接函数,重新连接服务器,进去游戏后使用保存的该断线玩家Controller就可以。

具体步骤:

1.断线后,保存断线玩家Controller,可以在GameState或GameInstance的子类下声明数组或者容器SavedPlayerControllers保存,保存当前玩家唯一的ID或名字,对应的断线Controller,这样断线重新连就根据ID或名字找到对应断线Controller重新使用。可以在玩家PlayerController的子类重载实现APlayerController::OnNetCleanup(UNetConnection* Connection),断线时候执行该函数实现网络清理或销毁对象。

void AShooterPlayerController::OnNetCleanup(class UNetConnection* Connection)
{
   保存断线玩家在SaveedPlayerControllers,然后返回。可能需要参考PlayerController::OnNetCleanup做些处理
        return;

    Super::OnNetCleanup(Connection);
}

2.客户端连接服务器(不管新连还是断线重连),服务器GameMode都会执函数RestartPlayer、SpawnPlayerControllerCommon等系列函数,可以断点查看执行顺序,了解GameMode生成Controller 和Pawn过程。我们可以在生成Controller 函数SpawnPlayerControllerCommon里处理,ShooterGame_TeamDeathMatch重载该函数实现;

APlayerController* ShooterGame_TeamDeathMatch::SpawnPlayerControllerCommon(ENetRole InRemoteRole, FVector const& SpawnLocation, FRotator const& SpawnRotation, TSubclassOf<APlayerController> InPlayerControllerClass)
{
    APlayerController* PlayerController = 在根据ID或名字在SavedPlayerControllers找到;
    if (PlayerController)
    {
        return PlayerController;
    }
    return Super::SpawnPlayerControllerCommon(InRemoteRole, SpawnLocation, SpawnRotation, PlayerControllerClass);

}

剩下流程交给UE4引擎处理,这里说明思路方向,最后可以结合互联网实现断线机制。

猜你喜欢

转载自blog.csdn.net/luomogenhaoqi/article/details/88640049