GameMode只有服务端有,适合写游戏逻辑。PlayerController每个客户端拥有一个,并拥有主控权。GameState在服务端同步到全端。

CLIENT生成的Actor对其有Authority。

http://api.unrealengine.com/CHN/Gameplay/Framework/index.html

简单来讲 需要同步的操作写到Server,不需要同步的操作写到Client

变量同步

Replicated 复制模式

RepNotify:会创建一个变量改变通知的函数

属性复制条件介绍:http://api.unrealengine.com/CHN/Gameplay/Networking/Actors/Properties/Conditions/index.html

HasAuthority

对这个ACTOR是否有主控权限,Client对自己拥有的Pawn有Authority,Client生成的Actor也拥有Authority

Owner

给一个Actor设置拥有者,用于网络复制条件判断。源码里

Instigator

负责Destroy此Actor的Actor

UPROPERTY(ReplicatedUsing=OnRep_Owner)//属性复制,改变时调用函数onRep_Owner
AActor* Owner;

C++内写法

//.h
UFUNCTION(NetMulticast, reliable)
void Fun2();
//.cpp
void Cls1::Fun2_Implementation() {//这里要加_Implementation()
}//Fun2函数的实现被UHT(UnrealHeaderTool)使用了

相关代码

UObject::CallFunctionByNameWithArguments

UEngine::SetClientTravel

Actor的复制属性

OnlyRelevantToOwner 只和所有者相关

如果为真,则该角色(网络同步)仅与其所有者相关。如果在播放期间更改此标志,则所有非所有者信道都需要显式关闭。

如果这个Actor服务器只想让Actor的所有者得到同步信息,或者说,不想让整个地图的人都知道Actor的信息,只想让距离Actor的一定范围的人得到同步,又或者说,只想让某些付费玩家得到同步信息,怎么办?这时有一个叫“network relevant”的概念,也就是说,只有当一个Actor对于服务器是net relevant的时候,服务器才会同步信息给他。比如说:只想让Actor的所有者得到信息,我们可以设置Actor::bOnlyRelevantToOwner变量为true。

If true, this actor is only relevant to its owner. If this flag is changed during play, all non-owner channels would need to be explicitly closed

AlwaysRelevant

始终与网络相关(覆盖OnlyRelevantToOwner)

Always relevant for network (overrides bOnlyRelevantToOwner).

ReplicateMovement

如果是真的,复制移动/位置相关的属性,也必须是演员来复制。

If true, replicate movement/location related properties. Actor must also be set to replicate.

Net Load on Client

加载于地图加载期间

This actor will be loaded on network clients during map load

NetUseOwnerRelevancy

如果Actor有拥有者,调用业主的IsNetRelevantFor,GetNetPriority

覆盖IsNetRelevantFor,可自定义关联更新

If actor has valid Owner, call Owner's IsNetRelevantFor and GetNetPriority

Replicates 复写到远程机器

If true, this actor will replicate to remote machines

NetDormancy

Dormancy setting for actor to take itself off of the replication list without being destroyed on clients.

休眠设置,使演员从复制列表脱身而不被客户端损坏

  • DORM_Never 永不休眠

    This actor can never go network dormant.
  • DORM_Awake 当前醒着,可以关闭

    This actor can go dormant, but is not currently dormant. Game code will tell it when it go dormant.
  • DORM_DormantAll 休眠 全体

    This actor wants to go fully dormant for all connections.
  • DORM_DormantPartial 休眠部分

    This actor may want to go dormant for some connections, GetNetDormancy() will be called to find out which.
  • DORM_Initial 初始休眠

    This actor is initially dormant for all connection if it was placed in map.

NetCullDistanceSquared 网络剔除距离平方

最大距离的平方, 从客户视口来看, 这个演员是相关的, 将被复制。

Square of the max distance from the client's viewpoint that this actor is relevant and will be replicated.

NetUpdateFrequency 网络更新频率

How often (per second) this actor will be considered for replication, used to determine NetUpdateTime

MinNetUpdateFrequency 不经常更改时 速率

How often (per second) this actor will be considered for replication, used to determine NetUpdateTime

Net Priority 网络更新优先权

Priority for this actor when checking for replication in a low bandwidth or saturated situation, higher priority means it is more likely to replicate

Replicated Movement 移动复制

Velocity Quantization Level 量子化等级,把float后面的小数Round(四舍五入)

UE4 Actor复制流程

服务器遍历每一个actor查询是否参与属性复制

  • 如果actor是 初始休眠 的,则跳过
  • 通过AActor::netUpdateFrequency检查Actor是否需要更新
  • 如果AActor::bOnlyRelevantToOwner为真,那么通过AActor::IsRelevancyOwnerFor栓查Actor所属connection
  • 对于每一个通过最初检测的actor, 会调用AActor::PreReplication。

通过AActor::PreReplicatoin决定是否想要为连接复制这个属性。通过DorepLifeTime_Active _Override

  • 全部条件通过会加入到ConsiderList

对于每一个在considerList的Actor

  • 考虑是否休眠。
  • 如果当前还未创建channel,考虑客户端是否加载了这个Actor,考虑actor与当前connection的相关性,未通过则跳过
  • 将上述、前连接相关的actor加入列表,此时拥有了个与连接相关的需复制的actor列表,根据重要性对列表排序

对于每一个排序过后的Actor

  • 如果当前连接仍未加载actor所在的level,则关掉channel
  • 每一秒都通过调用AActor::IsNetRelevantFor来确定actor是否和当前连接相关
  • 如果5秒不相关,关闭连接。如果相关但没有channel,则新开一个channel

如果在任意时刻connection饱和

  • 对于剩余actors,如果相关小于1秒,强制下帧更新
  • 如果大于1秒,调用AActor::IsNetRelevantFor瘊定下一帧是否更新

对于通过了以上规则的actor

通过调用UChannel::ReplicateActor对Actor进行复制

如果是channel打开后的第一次Update那么需要特殊初始化一些信息

如果该链接拥有这个actor,则设置actor::ENetRole=ROLE_AuonomousProxy,否则actor::ENetRole=Role_SimulatedProxy

相关文章

http://www.cnblogs.com/Leonhard-/p/6511821.html

https://blog.csdn.net/xiejihao/article/details/80264148#commentBox

https://blog.csdn.net/u012999985/article/details/78384199

UE4网络同步属性笔记的更多相关文章

  1. ue4网络同步概念笔记

    网络同步主要的概念是 复制.  不是以前的S,C逻辑分离.  是S复制到C通过 Switch Has Authority  将S与C的逻辑在程序内分离. 所属权:每个连接到S的C都有自己的 控制权.从 ...

  2. UE4网络功能相关笔记

    RepNotity的作用 把变量设置成RepNotify除了像C#语言中的"属性"一样,提供一个改变变量时调用一个函数的机会以外,其真正重要的作用其实是应对网通同步延迟问题. 一定 ...

  3. NetworkX学习笔记-5-NetworkX中怎样对多个网络赋属性,并根据属性排序

    这是我在数据分析过程中遇到的实际问题,简单记录一下.这里以DiGraph为例,其他类型的网络(图)的处理方法是一样的. 按照这里:http://networkx.github.io/documenta ...

  4. UE4 内容示例网络同步Learn

    一, 1.1 Actor的复制 Actor中的Replicates ,为true时,服务器会把该Actor同步,显示在客户端中. 1.2 Switch Has Authority判断是客户端还是服务器 ...

  5. 深入浅出UE4网络

    UE4中的官方文档结构比较混乱,且有部分错误,不方便学习.笔者试图通过本文,整理出一篇关于UE4网络的文章,方便朋友们对UE4中的网络同步部分的认识,并有进一步理解.如有讲得不清楚明白的地方,还望批评 ...

  6. 小白探究UE4网络系列(一)、UE4网络基础类分析

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 捣鼓UE4也有两个多月了,从这儿开始,逐步探究UE4中经典的值复制,RPC两种同步方式.想要弄到其复制和调用的原 ...

  7. SQL SERVER 数据库表同步复制 笔记

    SQL SERVER 数据库表同步复制 笔记 同步复制可运行在不同版本的SQL Server服务之间 环境模拟需要两台数据库192.168.1.1(发布),192.168.1.10(订阅) 1.在发布 ...

  8. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  9. muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制

    目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...

随机推荐

  1. Ubuntu 18.04中截图工具Shutter的编辑按钮不可用的解决办法

    Shutter是一个由第三方提供的在Ubuntu上运行的截图工具,相对于系统自带的截图工具(默认可通过Ctrl + Shift + Print快捷键启动截图),最大的优点就是可以即时对图片进行编辑,在 ...

  2. python接口自动化-post请求4

    云盘登录实操案例: 代码参考: # coding:utf-8 import requests ''' https的请求相对于http安全级别高,需要验证SSL证书 import urllib3 使用这 ...

  3. Synchronized的基本知识、实现原理以及其与ReentrantLock的区别

    一.synchronized知识 在谈论synchronized之前,我们需要了解线程安全问题的主要诱因.线程安全问题的主要诱因如下: 存在共享数据(也称为临界资源) 存在多条线程共同操作这些共享数据 ...

  4. ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)

    关心最多的问题,不FQ能不能用,答案是能.Google官方提供额外的域名来提供服务,国内可以正常使用. 一. 前言 验证码在我们实际的生活场景中非常常见,可以防止恶意破解密码.刷票.论坛灌水.刷注册等 ...

  5. Nginx+Django-Python+BPMN-JS的整合工作流实战项目

    前言 找一个好用的画图工具真心不容易,Activiti 工作流自带的 Web 版画图工具,外表挺华丽,其实使用起来各种拧巴:Eclipse 的 Activiti 画图插件,对于相对复杂的流程也是很不友 ...

  6. Linux增加开放端口号

    Linux增加开放端口号 : 方法一:命令行方式 1. 开放端口命令: /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT   2.保存:/etc/ ...

  7. visual studio 配置属性中增加自定义宏和宏值

    visual studio中有一些预先定义的宏,用于配置项目属性,如SolutionDir.我们也可以自定义类似的宏,从而在配置包含目录(include)或添加依赖项时简化配置项. 如何创建自己的宏呢 ...

  8. 【刷题】牛客网看到的鹅厂ML面筋-部分问题RecSys相关

    昨天下午六点半的电话面试,其实我已经有了一个不错的实习offer ,不是特别想去腾讯了,没有太怎么准备,接的电话. 整个面试15分钟,开始就是自我介绍,接着问项目,和上一段百度实习经历.问题大致如下: ...

  9. 查看电脑系统参数(Windows)

    发现工作的电脑开了很多任务,都运行的很好,所以记录下来(以后买电脑可以参考一下) 一.硬件详情(i5第七代?) 硬盘信息(分有固态和机械硬盘): 固态硬盘直接给了系统使用: 二.体验指数(基本都达到了 ...

  10. win 执行puppet

    C:\scripts\win_exec_proxy.bat  \\adsoft.base-fx.com\puppet\puppet\files\Windows_10_x64\C\user\logon\ ...