UE4网络部分(2)——Replication

本节内容参考视频彻底掌握UE4网络-03 Actor Replication

Replication简介

前一篇博文说过,在这个通信方式下,信息只能从服务端到客户端,如果客户端需要发送信息给服务端,那么就得用RPC框架。

还有一个很重要的点,Actor及其派生类才有Replication的能力,也可以理解为支持Replication的代码是写在Actor类里面的。

最后,它有三种分类:Actor Replication、Property Replication、Component Replication

Actor Replication

它其实有两层含义,一个是服务器生成一个对象、客户端跟着生成一个对象,相当于客户端从服务端复制了一份。

另外一层就是Actor Replication需要被开启,那么当前对象的属性、组件才能够被复制给客户端,否则是不行的。同时,也要开启Actor Replication,才能接着实现RPC框架,所以Actor Replication和RPC也是有关联的。

开启Actor Replication方法

蓝图编辑器上勾选"Replicaties",C++则是在构造函数里设置"bReplicaties = true"。

情况模拟

这里是博客,没有办法放视频,如果想具体地了解一下是否开启Actor Replication的区别可以移步博客开头的链接。

安宁老师实验的大概情况就是,在我们关闭Actor Replication开关的时候,设置服务端生成一个Actor,此时在客户端是无法看到这个Actor的,也就是服务端生成的对象、客户端并不会生成,但是玩家是没有办法穿过那个Actor所在的位置的,因为这个对象在服务端当中生成了,当玩家客户端想穿过这里的时候,服务端检测当然是不通过的。

而打开Actor Replication开关的时候,客户端和服务端都能正常看到Actor的生成。

下面这就是情况展示,第一个是没开Actor Replication,第二个是开了Actor Replication。

在这里插入图片描述
在这里插入图片描述

Property Replication

Actor Replication是复制整个对象,而是否复制对象的属性,取决于是否打开了Property Replication。

开启Property Replication方法

蓝图勾选"Replicaties",在属性的details里面找到Replication选择框选为"Replicatied"

C++则是:
1.属性前增加UPROPERTY(Replicated)
2.cpp文件中,在类中重写GetLifetimeReplicatedProps函数中,并添加:DOREPLIFATIME(类名称,变量名)。这个函数在基类中存在,这里只是重写,不需要声明。
记得现在头文件中添加

#include "Net/UnrealNetwork.h"

头文件中:
在这里插入图片描述

cpp文件中:
在这里插入图片描述

情况模拟

在这里插入图片描述
我们蓝图是这么设置的,我们来看看是否开启Property Replication,打印的Health的值会有什么区别。

这是开启的情况。
在这里插入图片描述
这是未开启。
在这里插入图片描述
很显然,如果我们只开启了Actor Replication,而没有开启Property Replication,那么现象就是:服务端在开始的时候建立一个Actor,客户端也会复制一个,但是当服务端对刚才建立的Actor的属性进行修改的时候,客户端的属性不会跟着改变

Rep_Notify

如果一个变量设置为Rep_Notify,当该变量发生复制时,对于蓝图而已,服务端和收到该值的客户端都可以调用一个自定义的函数对于C++的版本略有区别,仅在客户端调用这个自定义函数。

一个实际的应用就是,比如玩家的血量在服务端发生了改变,然后血量这个变量复制以后,客户端去调用一个自定义函数,将这个更新以后的血量显示在自己的UI界面上。

Rep_Notify开启方法

蓝图里,在属性的details里面找到Replication选择框选为"Rep_Notify",这个框框跟我们设置为"Replicatied"在同一个地方。

C++里面,变量前加上"UPROPERTY(ReplicatedUsing=xxx)"。其中,xxx为需要调用的自定义函数名称。并且也需要重写下面这个函数。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UE4(Unreal Engine 4)是一款强大的游戏开发引擎,它提供了多种网络功能,包括TCP客户端。 在UE4中,可以通过蓝图或C++代码实现TCP客户端。首先需要创建一个Socket对象并将其连接到服务器。可以使用Socket子系统来处理与TCP服务器的通信。 在连接建立之后,可以使用Socket对象发送和接收数据。可以使用Socket的Send()函数向服务器发送数据,使用Recv()函数接收服务器的响应数据。 在客户端代码中,可以根据游戏逻辑和需求,编写相应的处理逻辑。例如,可以使用线程来异步接收服务器的响应数据,并在主线程中处理接收到的数据。 同时,需要在客户端代码中处理TCP连接的错误和异常情况,以确保网络通信的稳定性和可靠性。可以使用Try/Catch块来捕获可能发生的异常,并进行相应的处理。 除了基本的TCP客户端功能,UE4还提供了其他更高级的网络功能,如RPC(Remote Procedure Call)和Replication(复制),用于处理远程函数调用和多人游戏中的数据同步等问题。 总的来说,UE4提供了方便易用的TCP客户端功能,开发人员可以根据自己的需求使用蓝图或C++代码编写相应的网络逻辑,实现与服务器的通信。 ### 回答2: UE4是一款流行的游戏引擎,它提供了强大的功能和工具,用于开发高质量的游戏和应用程序。UE4通过使用蓝图和C++编程语言来创建游戏逻辑和功能。 UE4中的TCP客户端是一种用于建立基于TCP/IP协议的网络通信的工具。TCP(传输控制协议)是一种可靠的连接型协议,它能够确保数据的可靠传输和顺序传递。TCP客户端可以与远程服务器进行通信,发送和接收数据。 在UE4中创建TCP客户端需要以下步骤: 1. 导入网络模块:首先,需要在UE4项目中导入网络模块,以在蓝图或代码中使用相应的网络功能。 2. 创建TCP套接字:通过使用UE4提供的套接字类创建一个TCP套接字对象。套接字是一种网络通信的接口,它可以在客户端和服务器之间建立连接。 3. 连接到服务器:使用套接字对象的Connect函数来连接到远程服务器。在连接之前,需要提供服务器的IP地址和端口号。 4. 发送和接收数据:一旦连接建立成功,可以使用套接字对象的Send和Receive函数来发送和接收数据。可以通过字符串或字节数组的方式发送和接收数据。 5. 关闭连接:当通信结束时,需要使用套接字对象的Close函数来关闭连接,并释放相关资源。 通过以上步骤,我们就可以在UE4中创建一个TCP客户端,实现与远程服务器的通信。这样可以打开许多可能性,比如实时多人游戏中的玩家之间的通信、在线排行榜的更新等等。TCP客户端在网络通信中具有可靠性和稳定性,因此在很多场景下都是一个重要的组件。 ### 回答3: UE4是一款强大的游戏开发引擎,支持使用TCP协议进行网络通信。下面是关于UE4 TCP客户端的详细说明: 首先,UE4提供了一系列的网络编程功能来实现TCP客户端。要创建一个TCP客户端,首先需要在项目中添加网络功能模块。然后,在游戏中创建一个Socket对象,该对象将用于与服务器进行通信。 接下来,需要通过Socket对象连接到服务器。在连接之前,需要指定服务器的IP地址和端口号。一旦连接成功,就可以通过Socket对象发送和接收消息。 要发送消息,可以使用UE4的Send方法,通过Socket对象将消息数据发送给服务器。要接收消息,可以使用UE4的Recv方法,通过Socket对象从服务器接收消息数据。使用这些方法可以实现与服务器的双向通信。 在实际应用中,可以根据游戏的需求和设计来使用TCP客户端。例如,可以在游戏中实现多人联机功能,通过TCP客户端来与其他玩家进行通信。还可以使用TCP客户端在游戏中获取服务器提供的数据,例如排行榜信息或者游戏状态更新等。 总结来说,UE4提供了丰富的网络编程功能,可以轻松实现TCP客户端。通过连接服务器、发送和接收消息,可以与服务器进行双向通信。这为游戏开发者提供了很多可能性,可以实现各种有趣的网络功能和游戏玩法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值