Unreal Engine 网络系统(二):网络对象同步、网络身份

目录

网络身份

行为同步和属性同步

Actor网络身份-区分Client & Server

身份授权类别

划分终端所在用途


思考几个问题:

  1. 什么是同步?
  2. 网络游戏中,什么内容需要同步?
  3. 虚幻中的同步单位是什么?
  4. 是不是所有内容都需要同步?

  • 静态摆放

场景中摆放的Actor,默认是同步到所有终端,但是它们没有做网络关联。

Net Load On Client选项默认是勾选的,也就是场景中的物体默认都会在所有终端显示,但是并不代表所有物体对象都需要进行网络同步,因为所有内容全部同步的成本非常高。

  • 动态生成

场景中摆放的Actor需要进行网络同步时,需要在细节面板中勾选"Replicates",默认是关闭的。

生成和销毁

在服务器生成Actor,若开启"Replicates",则会同步到所有终端

在服务器销毁Actor,若开启"Replicates",则所有终端中关联对象均会被销毁

但是,开启"Replicates"就一定会同步所有行为和属性吗?

No!开启"Replicates"只代表对象在网络有同步的能力,而具体怎么同步,要同步什么内容,需要设计者去思考。

行为同步和属性同步

行为同步

调用与执行位置进行拆分。即:调用位置和执行位置不一定相同。(RPC)

  • 举例:Server调用“吃苹果”,广播给所有Client去执行“吃苹果”
  • 举例:Client调用“吃苹果”,让Server执行“吃苹果”
  • 前提:调用和执行拆分的是成员函数,也就是说我们同步的是成员函数,依据的是对象,而这个对象若要进行关联则需要开启"Replicates"。
    • 举例:丢手雷,所有终端都需要看到手雷。

属性同步

  • 每个Acto维护一个全属性列表,其中包含Replicated说明符。每当复制的属性值发生变化时,Server会向所有Client发送更新。Client会将其应用到Actor的本地版本上。这些更新只会来自Server,Client永远不会向Server或其他Client发送属性更新。
  • Actor属性复制可靠,意味着Actor的Client版本的属性最终反应Server上的值,而不必接受每一个单独的变化。
  • 蓝图中的同步方式:
    • Replicated:同步数据,但没有通知
    • RedNotify:同步数据,并生成通知函数

Actor网络身份-区分Client & Server

当对象开启了网络同步,那么将会获得网络身份授权。

根据终端不同,分为本地身份(Local)和远端身份(Remote)

  • LocalRole:用来裁定当前Actor在当前终端的身份
  • RemoteRole:用来裁定当前Actor在远端的身份

Unreal Engine 网络系统(二):网络对象同步、网络身份_第1张图片

Unreal Engine 网络系统(二):网络对象同步、网络身份_第2张图片

身份授权类别

  • Simulated
    • Actor为远程代理,顾名思义,这个Actor完全是模拟出来的一个东西,由另一台机器上的授权Actor完全控制。网络游戏中如拾取物、发射物或交互对象等多数Actor将在远程客户端上显示为Simulated proxy
  • Autonomous
    • Actor为远程代理,能够本地执行部分功能。但会接受授权Actor中的矫正。说白了就是会收到Server的检查。Autonomous proxy通常为玩家直接控制的Actor所保留,如pawn。
  • Authority
    • 仅存在与Server的身份,权威的,“一切由我说了算”。当前Actor会将其信息复制到其他机器上的远程代理。
  • None
    • 无身份,未开启"Replicates"

Unreal Engine 网络系统(二):网络对象同步、网络身份_第3张图片

 Unreal Engine 网络系统(二):网络对象同步、网络身份_第4张图片

划分终端所在用途

在执行行为同步时,我们必须直到当前对象执行行为时所在的终端类型,以便我们选择合适的同步方式,处理动作

举例:Client有一个开枪动作,这时就需要到Server去检查玩家是否具备开枪的能力。Client开枪,但执行结果在Server,这时就需要我们知道动作产生在哪里。

Unreal框架中,有主机端的概念,即玩家操控端和主机端重叠(说白了就是房主,比如CS、魔兽争霸里的房主,也需要参与游戏),主机端也产生游戏逻辑。所以执行动作我们必须要清楚动作的所在终端。

你可能感兴趣的:(Unreal,Engine,虚幻,游戏引擎)