虚幻引擎中网络角色Role相关概念

简介

在Actor的复制过程中,需要关心两个属性,Role与RemoteRole。

通过这两个属性,可以明确地知道:

  • 谁拥有Actor的主控权
  • Actor是否被复制
  • 复制模式

首先一件要确定的事,就是谁拥有特定 actor 的主控权。要确定当前运行的引擎实例是否有主控者,需要查看 Role 属性是否为 ROLE_Authority。如果是,就表明这个运行中的 虚幻引擎 实例负责掌管此 actor(决定其是否被复制)。

如果 Role 是 ROLE_Authority,RemoteRole 是 ROLE_SimulatedProxyROLE_AutonomousProxy,就说明这个引擎实例负责将此 actor 复制到远程连接。

简单来说:

对于单机模式,Actor的Role与RemoteRole很显然都是ROLE_Authority。

对于网络模型下,Role代表本地对于Actor的角色,RemoteRole代表对端对于Actor的角色。

下面将重点描述多人游戏时的相关机制。

属性类型

ROLE_Authority

代表最高权限,通常是服务器持有的状态。

如果客户端本地生成的一个不同步的Actor,其Role有可能也为ROLE_Authority,因为此时这个客户端对这个Actor具有绝对的权限。

ROLE_SimulatedProxy

被动模拟角色,由服务器控制,客户端仅接受同步数据。

比如对于客户端A视角下的另一个角色,它的Role就有可能是ROLE_SimulatedProxy。

ROLE_AutonomousProxy

主控端角色,通常代表由客户端直接控制,服务器接收控制的输入来同步其状态。

比如对于客户端A视角下的自身角色,它的Role就有可能是ROLE_AutonomousProxy,接收输入之后发给服务器更新其状态。

RemoteRole与Role的区别

RemoteRole与Role对应,代表对端对Actor的角色定义,是Role的另一个视角。

当Actor在服务器为ROLE_Authority,他在服务器上的RemoteRole为ROLE_SimulatedProxy,对应的客户端的Role为ROLE_SimulatedProxy,RemoteRole为ROLE_Authority。

对于不同的数值观察者,它们的 Role 和 RemoteRole 值可能发生对调。

注意这个可能的描述

比如客户端Role为ROLE_AutonomousProxy,RemoteRole为ROLE_Authority的角色(自己操作的那个),他在服务器上的Role为ROLE_Authority,但是RemoteRole可能为ROLE_SimulatedProxy。

角色组合

常见Role与RemoteRole的组合

本地Role 远程RemoteRole 场景说明
ROLE_Authority ROLE_SimulatedProxy 服务器视角,控制Actor,客户端仅接收同步数据(如NPC)。
ROLE_SimulatedProxy ROLE_Authority 客户端视角,客户端接收服务器同步的Actor(如静态场景物体)。
ROLE_AutonomousProxy ROLE_SimulatedProxy 客户端视角,客户端控制Actor,服务器同步其状态(如玩家角色)。

区分SimulatedProxy与AutonomousProxy

参考官方文档的描述,由于Actor的同步具有间隔,为了弥补这个缺陷,客户端在模拟时采取两种策略:

ROLE_SimulatedProxy通常直接根据服务器同步的信息进行模拟。

ROLE_AutonomousProxy通常会考虑客户端自身的输入,通过这部分输入来补足信息,而非只通过服务器的信息推算。

参考文档

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...