UE4网络同步

这篇具有很好参考价值的文章主要介绍了UE4网络同步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Actor是UE网络同步核心。所有的数据同步都是围绕Actor展开的。服务器将保留一份Actor列表并定期更新客户端,以便客户端保留每个Actor(那些需要被同步的Actor)的近似复本。(比如:玩家角色,武器等)

Actor主要通过两种方式进行更新: 属性复制 和 RPC(远程过程调用)

如此设计的原因是,如果按照协议模式开发,客户端和服务器架构不一样,负责人不一样,导致两边的逻辑各有一份代码,一边逻辑改动需要另一边的开发人员也配合做相应的修改。同时测试起来也很麻烦。UE的基于Actor为基础的同步方式是为了方便开发,便于维护。一块逻辑可以由一个人负责客户端和服务器全部代码。开发者只要考虑新的Actor哪些需要用RPC,哪些需要用属性复制就可以了。又因为提供PIE模式,客户端和服务器逻辑可以同时运行,更能方便调试。打包时可以直接把客户端打包成APP,Server端打包成Linux服务器。

开发过程中代码上要能区分是服务器或者客户端还是模拟端。一般情况使用权威、主控或者模拟权限来确保代码在什么地方运行。对于两个客户端A和B,可以让其中一个作为监听服务器,另一个作为单纯客户端,也可以两者都是客户端,然后开发一个专有服务器。这两种情况在实际开发中都有使用,视具体情况而定。但总之,只要是Server那它就具有“权威”属性,在C++代码中可以用HasAuthority()来判断。对于一个客户端A,其权限即为“主控”,对于它来说,其他的客户端权限即为“模拟”,C++代码中可以使用IsLocallyControlled() 判断是否为本地客户端。

如若需要Actor具有同步功能,需要在该Actor蓝图中勾选Replicates属性,如下图所示:

UE4网络同步

C++代码中使用 bReplicated = true;

属性复制

需要具备同步功能的变量,可以通过设置其Replication来实现。

UE4网络同步

None即为不复制,该变量不具备同步功能。

Replicated为复制,该变量的值会被服务器同步到客户端,在各个客户端保持相同的值(C++中在变量上方添加
UPROPERTY(Replicated))。

RepNotify也具有复制功能,当变量设置为该选项时,蓝图会生成一个Notify函数,在变量的值改变时,服务器会将改变的值同步给客户端,如果客户端中该属性原来的值与同步过来的值不一样,则会调用Notify函数,执行一些定义的操作(C++中需手动定义Notify函数,并在需要复制的变量上方声明UPROPERTY(ReplicatedUsing = 函数名))。

Replication Condition:属性复制条件,其各个选项功能如下:

COND_InitiaIOnIy该属性仅在初始数据时尝试发送
COND_OwnerOnly该属性仅发送至actor的所有者
COND_SkipOwner该属性将发送至除所有者之外的每个连接
COND_SimuIatedOnIy该属性仅发送至模拟actor
COND_AutonomousOnIy该属性仅发送给自治(主控)actor
COND_SimuIatedOrPhysics该属性仅发送给自治(主控)actor
COND_lnitialOrOwner该属性将发送初始数据包,或者发送至actor所有者
COND_Custom该属性没有特定条件,但需要通过SetCustomIsActiveOverride得到开启/关

RPC

RPC即远程过程调用,适用于函数,有如下几种使用形式:

UE4网络同步

Not Replicated:不启用复制功能。

Multicast:多播,若在服务器调用,服务器将使该函数在所有客户端执行;若在客户端调用,函数将只在本地执行。

Run On Server:服务器或客户端均可调用,函数将在服务器上执行。

Run On owning Client:服务器或客户端均可调用,若在服务器调用,将在Actor所属客户端执行(单独服务器无客户端的话就在服务器上执行),若在客户端调用,则在本地客户端执行。

总的来说,服务器调用RPC所有权如下:

UE4网络同步

客户端调用RPC所有权如下:

UE4网络同步

举个利用RPC实现同步的简单例子,如果客户端播放一个蒙太奇动画,想实现这个动画所有端都能同步播放的话,可以写一个自定义事件MulticastPlayMontage,将其设为Multicast,直接调用PlayMontage方法;再写一个自定义事件ServerPlayMontage,设为Run On Server,调用MulticastPlayMontage事件:

UE4网络同步

在本地客户端中需要同步播放蒙太奇动画的地方直接调用ServerPlayMontage,方法将由客户端调用,在服务器执行,然后服务器又会执行MulticastPlayMontage方法多播给所有客户端,实现所有端的同步播放。文章来源地址https://www.toymoban.com/news/detail-481539.html

到了这里,关于UE4网络同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE4点击UI在场景中生成actor

    1.创建一个spawnMesh(actor),添加一个static组件,写入一个设置staticMesh的函数,暴露出new mesh。 2.创建结构体Create2   3.创建wid1和wid2(widget)。 wid1:  写一个set style事件,用变量icon来设置image_icon,变量name设置text block。这两个变量需要暴露出去。  创建wid之前完成set style事件  写

    2024年02月11日
    浏览(36)
  • UE4 Physics Constraint Actor 实现钟摆效果

    放入场景,然后将一个球体放入场景 选择小球 将小球改为Movable 选择模拟物理,并将小球移除平衡点 就实现了

    2024年02月09日
    浏览(44)
  • UE4 C++:Actor与Component的创建、销毁

    目录 Actor的创建与销毁 创建 UClass* TSubclassOf SpawnActor() 销毁 直接销毁:Destroy() 设置生命周期 Component 的创建与销毁 创建 构造函数创建:CreateDefaultSubobject Runtime创建:NewObject、RegisterComponent() 加载资源 FObjectFinder构造函数加载资源 LoadObject加载资源 设置组件层级关系 销毁组件

    2023年04月11日
    浏览(46)
  • 观察UE4里“在外部存储Actor”功能的基础行为

    一般情况下,Actor保存于关卡文件中。 但是,如果将Actor的 packaging mode 设置为 External : 则此Actor就会存储在另一个文件而非关卡文件中。 本篇目标是: 观察此功能的基础行为 观察外部文件的路径名规则 对于一般的Actor(默认 packaging mode 为 Internal )。修改此Actor会标脏关卡

    2024年02月05日
    浏览(39)
  • 【UE5/UE4】【UE C++】制作一个蓝图宏库用以在构造器中Spawn Actor

    实际上该功能可以通过纯蓝图写出,以下展示蓝图中如何操作构造器 仅需在创建\\\"自定义事件\\\"的时候勾选\\\"编辑器中调用\\\"属性,然后就可以直接在蓝图中生成 但同时,我们发现\\\"从类生成Actor\\\"该蓝图节点具有生成局限性 无法在当前关卡外生成 以及无法生成某些在蓝图中公开却不在

    2024年02月14日
    浏览(57)
  • UE4/5动画系列(3.通过后期处理动画蓝图的头部朝向Actor,两种方法:1.通过动画层接口的look at方法。2.通过control rig的方法)

    目录 蓝图 点积dot Yaw判断  后期处理动画蓝图  动画层接口 ControlRig: 首先我们创建一个actor类,这个actor类是我们要看的东西,actor在哪,我们的动物就要看到哪里(同样,这个我们也是做一个父类,因为它会和我们的蓝图类模板一起使用)。 这样子做,将模型作为根(也可

    2024年02月11日
    浏览(63)
  • 【虚幻引擎】UE4 同步和异步资源加载(软引用)

    虚幻引擎给我们提供了两种引用,一个是硬引用。软引用通常是仅储存资源对象的资源路径没有与资源产生耦合关系的引用(软引用加载到内存中,引用对象不会被加载到内存中,只有在需要的时候才会被加载进内存中)。硬引用则是拥有资源对象实际成员变量,直接与资源对

    2024年02月01日
    浏览(100)
  • UE4网络图片加载库(带内存缓存和磁盘缓存)

    UE4网络图片加载库,带内存缓存和磁盘缓存,支持自定义缓存大小,支持蓝图和C++代码调用 KeImageNet.h

    2024年04月27日
    浏览(32)
  • UE4 TCP通信 (UE客户端与网络调试助手服务端、python服务端通信)

    目录 一、使用UE4建立TCP客户端 二、使用网络调试助手建立服务端 三、基于网络调试助手的服务端与UE客户端通信 四、基于python的TCP服务端与UE客户端通信  1.在虚幻商城中搜索socket来下载TCP Socket Plugin插件   2.安装到引擎,目前支持的版本是4.22-4.27和5.0  点击安装 大约30M 

    2024年01月16日
    浏览(47)
  • ue之C++ 创建Actor

    UE中创建Actor十分简单: 如下图: 点击New C++ Class就可以啦。但是点击之后会发生什么呢? 首先他会出现对话框,询问我们需要创建哪一种类型的Actor,在这里说明一下unreal中C++可以创建的东西大致分为两类,第一种是Class,另外一种就是Plugins,在这里我们新建的是class,类,

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包