UE4-网络

1.网络构架

 

 

 2.Replication

信息从服务端同步到客服端(单向),Actor及其派生类才有Replication的能力

类型

  • Actor Replication(类)
  • Property Replication(属性)
  • Compoenent Replication(组件)

Actor Replication的两层意义

1.服务端生成,客户端也跟着生成(在服务端生成一个replication对象)

2.当前Actor的所有属性复制,组件复制,RPC的总开关

开启Actor Replication

蓝图:勾选“Replication” 

C++:bReplication = true; 

 cpp文件中的构造函数中

 实例演示

Switch Has Authority(Authority:相当于服务端,Remote:相当于客户端)

 测试联网状态下的设置

 没勾选

 勾选后

 Property Replication(属性复制的设置方法)

蓝图:属性的Replication设置为Replicated

 在服务端设置,如果服务端Replication不设置为Replicated,客户端看不见属性

  未设置前

 设置后

 C++:

  1. 属性前加UPROPERTY(Replication)
  2. .cpp文件中,在GetLifetimeReplicatedProps函数中添加:DOREPLIFETIME(类名称,变量名) 不需要声明 该函数

 添加属性
VisibleAnywhere:蓝图中也能看见

 

 添加头文件

 RepNotift(复制通知)

如果一个变量设置为Rep_Notify,当该变量发生复制时,服务端和收到该值的客户端都可以调用一个自定义的函数

C++仅在客户端调用函数

蓝图:属性的Replication设置为RepNotify即自动生成

当属性的Replication设置为RepNotify,会自动生成一个ONRep的函数

设置后set变量将发生改变 

 在蓝图中服务端和客户端都可以调用

c++:UPROPERTY(ReolicatedUsing=xxx)

让变量可以复制 

 

  

3.Ownership

有几个玩家加入就有几个Connection

Ownership的作用

  • RPC需要确定哪个客户端将执行运行于客户端的RPC
  • Actor复制与连接相关性
  •  在涉及所有者时的Actor属性复制条件

设置 /改变/获取Ownership

  • SpawnActor(SpawnParanmeters中有Owner)
  • SetOwner
  • Possess(OnPossess->PosssesssedBy->SetOwner),UnPossess

4.Actor Role 

 Authority:有控制权

Simulated Proxy:模拟代理权

Autonomous  Proxy:自主代理权

 Server:服务端,Client:客户端。大笑脸代表自己

 5.RPC

 类似于函数调用,不过不一定是本地执行

可以实现:

  • 客户端调用服务端执行
  • 服务端调用客户端执行

不可以有返回值,默认是“不可靠的”(可以设置为可靠的:Reliable)                   

RPC设置

蓝图:

CustomEvent自定义事件的Replicates选项设置为

  • Run On Server(服务端执行)
  • Run On Owning Client(客户端执行)
  • Net MultiCast(所有端点执行)

C++

要将一个函数声明为RPC,只需将

  • Server
  • Client
  • NetMulticast

关键字添加到UFUNCTION声明 

实例 

首先要勾选Replication,使其可复制

 

具体蓝图 

 详细蓝图

Authorrity:代表服务端,Remote:代表客户端

Is Locally Controlled:是否是本地控制器,及是否是大笑脸

Get Local Role:得到本地角色,及笑脸(判断是否是大笑脸)

 

 客户端调用事件在服务端生成,

 仅服务端实现(服务器生成一个,客户端复制一个)

 仅客户端实现(两个客户端通过服务器生成,自身复制)

都实现

 

测试 Multicast 

 仅在服务端按鼠标右键才打印,服务端和客户端都打印

测试 Server

 

 

只有服务端打印

测试 Client 

先创建一个GameMode(因为GameMode只在服务端存在)

GameMode里的蓝图

Event onPostLogin:当有玩家连接时调用

Get Remote Role:获取远端角色

 Get Local Role:获取本地角色

 

 Has Authority:是否为Authority(相当于是否为服务端) ​​​​

  最终蓝图

GameMode

 调用Test Client

调用Test Multicast

Test Server

 

猜你喜欢

转载自blog.csdn.net/qq_52825422/article/details/126435182