UE5

UE网络

网络模式 NM_Standalone模式:服务器在本地计算机运行,不接受来自远程计算机的客户端,适合单人游戏或者本地多人游戏。没有服务器和客户端的区别,逻辑都在本地执行。 NM_DedicatedServer模式(专用服务器):专属服务器没有本地玩家,用于托管在受信任服务器上的多人游戏,比如在线射击游戏。服务器不会有本地玩家ULocalPlayer、APlayerController等一些客户端专有的类,也会抛弃掉客户端独有的逻辑,为了减少性能开销。总而言之,就是服务器只处理多人游戏逻辑和同步,不参与游戏,节省资源。 NM_ListenServer模式(监听服务器):本机又是服务器又是客户端,主客户端拥有全部服务器权限,其他客户端可以连接这个Listen Server。举例子:星露谷物语、Minecraft这种游戏的联机模式。 NM_Client模式(纯客户端):非服务器模式,本地计算机是专属或监听服务器的客户端,不会允许服务器端逻辑。 Playable Has Authority Clients Can Join NM_Standalone ✅ ✅ ❌ NM_DedicatedServer ✅ ✅ ✅ NM_ListenServer ❌ ✅ ✅ NM_Client ✅ ❌ ❌ 局域网联机(LAN) HostLANGame函数代表本机加载这个路径的地图,然后作为监听服务器等待其他玩家加入。 JoinLANGame函数代表客户端连接到这个ip地址的服务器中作为客户端加入。 void AMultiplayerGameGameMode::HostLANGame() { // ?listen代表游戏作为监听服务器(Listen Server) 这个游戏实例既是服务器又是客户端 GetWorld()->ServerTravel("/Game/ThirdPerson/Maps/ThirdPersonMap?listen"); } void AMultiplayerGameGameMode::JoinLANGame() { APlayerController *PC = GetGameInstance()->GetFirstLocalPlayerController(); if (PC) { PC->ClientTravel("192.168.31.130", TRAVEL_Absolute); } } 在蓝图中调用该函数,然后将项目打包后运行在另一个局域网电脑中,就可以实现局域网联机了。 Actor复制(Replication)机制 创建和销毁:服务器创建的Actor,客户端也能看到,并且销毁时同步消除。这一部分UE已经帮我们实现了,不需要我们做什么。 移动复制:同步Actor的位置、旋转、速度等移动信息,保持物理表现一致。只需要在蓝图上勾选Replication中的选项。 变量复制:同步服务器上的变量(比如血量、分数、状态)到客户端。 RPCs远程函数调用:1. Server(客户端向服务器请求,比如攻击) 2. Client(服务器通知客户端,比如受伤) 3. Multicast(广播,比如爆炸) 网络角色(Network Role) AActor::GetLocalRole函数用来返回角色控制权限,返回值有: ROLE_None:无效,不参与网络同步。 ROLE_SimulatedProxy:模拟代理,只做视觉表现不控制逻辑,比如客户端上看到的其他玩家。 ROLE_AutonomousProxy:自主代理,拥有本地控制权,比如客户端自己的Pawn。 ROLE_Authority:拥有最高控制权,服务器对所有的Actor来说都是Authority。 通过HasAuthority()来测试是否当前运行的是客户端或者服务端。