ue4 Actor属性同步流程

Actor属性同步

明确几个概念

ActorChannel(用来实现Actor同步的通道)

其中有保存对应的Actor和Actor中需要同步的Component(Component是从UObject派生)

先来关注函数

为了方便理解,此处可以把Bunch理解为接收到的数据包,有了Bunch,首先需要知道此数据是同步给哪个Object的,ProcessBunch中的如下代码来获取,

接下来还需要知道此Bunch所同步的属性属于哪个Object(可能同步的是Actor中某个Component的属性)

接着往下看,就是属性的具体处理了

而FObjectReplicator有个成员变量RepLayout来处理具体的属性复制,

在ReceivedBunch中,具体的调用代码如下:

ReceiveProperties就是具体的属性处理了。

RepLayout看名字就知道,它是一个Object中所有可复制的属性的列表,事实也是这样,保存在如下变量中

一个Bunch中同步到属性可以是多个,因此会有个属性的遍历,如下:

那复制的究竟是哪个属性呢,这里不那么直观,是通过如下class实现的

这里重点关注此类中的如下两个变量

WaitingHandle是等待处理的属性

CurrentHandle是当前正在处理的属性

这里再回头看ReadNextHandle方法

这里就很明显了,通过Bunch获取待处理的属性,再回到下图

ProcessCmds处理所有的属性,通过一些转调用,具体是通过ProcessCmds_r函数处理属性的,如下

此函数中遍历了所有的Cmds,通过如下代码来决定Cmd是否是要同步的属性

如下是ShouldProcessNextCmd的代码(此处使用了宏替换)

这里很明显,判断当前属性是否是待处理的属性,如果是,调用ProcessCmd

ProcessCmd实现如下(此处使用宏替换)

此函数也很简单,调用ReceivePropertyHelper处理某个具体的属性,通过ReadNextHandle跳到下一个属性,实现属性的遍历

最后,分析函数ReceivePropertyHelper,真正用来实现属性复制的代码

再往下,就是属性变化的回调处理了,OnRep_XXX

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值