RhinoFreak 发表于 2023-3-1 18:57

Unreal Engine Networking

UE中客户端和服务器都运行相同的游戏代码,但是根据不同的网络角色(ENetRole)来执行不同的逻辑。
在UE中,客户端-服务器模型有以下几个特点:

[*]服务器是游戏世界的权威源,它负责处理所有的游戏逻辑、物理模拟、碰撞检测等,并将结果同步给客户端。
[*]客户端是游戏世界的观察者,它负责渲染画面、播放声音、接收用户输入等,并将输入发送给服务器。
[*]客户端和服务器之间通过RPC(远程过程调用)和Replication(复制)来通信。RPC是一种从一个网络角色向另一个网络角色发送消息或函数调用的方式。Replication是一种自动地在网络角色之间同步变量或对象状态的方式。
UE中有用来区分不同的网络角色/实体的枚举类型(ENetRole):

[*]ROLE_None:表示这个实体不参与网络通信,只存在于本地。例如:一个只在单机游戏中出现的敌人或道具。
[*]ROLE_Authority:表示这个实体是游戏世界的权威源,通常是服务器或者单机游戏中的本地玩家。例如:一个在线游戏中运行在服务器上的NPC或物理对象。
[*]ROLE_AutonomousProxy:表示这个实体是一个自主代理,通常是客户端上的本地玩家,可以接收用户输入并发送给服务器。例如:一个在线游戏中运行在客户端上的本地玩家控制器或Pawn。
[*]ROLE_SimulatedProxy:表示这个实体是一个模拟代理,通常是客户端上的其他玩家或者非玩家角色(NPC),只能接收服务器的同步信息。例如:一个在线游戏中运行在客户端上的其他玩家控制器或Pawn。
在代码中,可以通过Actor类的Role属性来获取或设置网络角色。例如:
// 获取当前Actor的网络角色
ENetRole CurrentRole = GetLocalRole();

// 设置当前Actor为自主代理
SetAutonomousProxy(true);

// 判断当前Actor是否为权威源
if (HasAuthority())
{
    // 执行一些只有权威源才能执行的逻辑
}
页: [1]
查看完整版本: Unreal Engine Networking