UE网络同步

UE网络同步

一、基础概念
1、 客户端-服务器 模型:网络中的一台计算机作为 服务器 主持多人游戏会话,而所有其他玩家的计算机作为 客户端 连接到该服务器。然后,服务器与连接的客户端分享游戏状态信息,并提供一种客户端之间通信的方法。

2、服务器是多人游戏实际发生的地方。客户端会远程控制其在服务器上各自拥有的 Pawn,发送过程调用以使其执行游戏操作。

3、客户端使用服务器复制过来的信息,对服务器上正在发生的情况进行高度模拟。

4、在C++中使用对应 UPROPERTY 宏内的 Replicated 或 ReplicateUsing(能设置RepNotify函数) 说明符

5、远程过程调用RPC(复制函数):RPC是传输到网络游戏中特定机器的特殊函数。无论初始调用RPC的是哪台机器,其的实现仅在目标机器上运行。此类RPC可指定为服务器(仅在服务器上运行)、客户端(仅在Actor的拥有客户端上运行)或NetMulticast(在连接会话的所有机器上运行,包括服务器)。

Server、Client、NetMulticast
Reliable、Unreliable
不可靠RPC无法保证必会到达预定目的地,但其发送速度和频率高于可靠的RPC。其最适用于对gameplay而言不重要或经常调用的函数。如Actor的每帧移动
可靠的RPC保证到达预定目的地,并在成功接收之前一直保留在队列中。其最适合用于对gameplay很关键或者不经常调用的函数。如碰撞事件、武器发射的开始或结束,或生成Actor。
6、RepNotify:RepNotify仅在变量更新时本地触发,RepNotify可减少开销,比RPC或复制函数更加好用.

在蓝图中,客户端、服务器均会自动调用。
在C++中,只有客户端调用,服务器需要手动调用。
二、要点
Actor(客户端):有连接的Actor,ROLE_AutonompusProxy; 无连接的Actor,ROLE_SimulatedProxy
RPC: 
使用:UFUNCTION(Reliable,Client)
RPC函数在服务器上执行
Actor是从服务器创建并同步给客户端的
Actor必须被复制
多播MultiCast RPC 不会发送给所有客户端,只会发送给NetRelevant的客户端
RPC函数除了UObject类型的指针以及constFString&的字符串外,其他类型的指针或者引用都不可以作为RPC的参数
RPC函数不能有返回值
网络链接的信息存储在PlayerController里
对于一个Actor,三中获得链接的方法:
设置自己的owner为拥有连接的PlayerController,或者自己owner的owner为拥有连接的PlayerController
这个Actor必须是Pawn并且Possess了拥有连接的PlayerController
这个Actor设置自己的owner为拥有连接的Pawn
如果在客户端创建一个独有的Actor(不能勾选bReplicate)。那么这个Actor的Role也是ROLE_Authority
RPC的执行与同步的执行是有先后关系的,而这种关系会影响到代码的逻辑
属性同步:GetLifetimeReplicatedProps和DROPLIFETIME、DROPLIFETIME_CONDITION
COND_InitialOnly  只会在Actor初始化的时候同步一次。DROPLIFETIME_CONDITION(CHARACTER,bIsTargeting,COND_InitialOnly)
属性同步的基本原理就是服务器在创建同步通道的时候给每一个Actor对象创建一个属性变化表
结构体UStruct可以被标记Replicated并且结构体内的数据默认都会被同步
Struct结构内的数据是不能标记Replicated的
UStruct不可以以成员指针的方式在类中声明
属性回调理论上一定会执行,而RPC函数有可能由于错过执行时机而不再会执行
可以成功在网络上传递UObject对象的引用的四种情况:
标记replicate
从数据包直接Load
通过Construction scripts添加或者C++构造函数里面添加
使用UActorComponent::SetNetAddressable标记(这个只针对组件,其实蓝图里面创建的组件默认就会执行这个操作)
动态组件:AActorComponent ::SetIsReplicated(true)
对于C++默认的组件,需要放在构造函数里面构造并设置同步

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值