虚幻引擎网络系统(二)——RPC同步

虚幻引擎网络系统(二)——RPC同步

远端调用Romote Procedure Call

允许客户端或服务端通过网络连接相互发送消息。行为同步,主要作用是将调用和执行进行了拆分。

RPC是借助事件来完成的

RPC执行三种形式

服务端执行(Server)在持有当前Actor客户端调用,在服务端执行
在持有对象的客户端执行(Client)在服务端调用,在持有对象的客户端执行
所有终端执行(Multicast)在服务端调用,在所有终端执行

在这里插入图片描述

在这里插入图片描述

这样没法做到客户端与服务器的颜色一样

在这里插入图片描述

第二个需求:按下F改对方颜色

在这里插入图片描述

在客户端中,当前终端的PlayerController,Pawn,PlayerState的所有权均属于当前终端。

——————————————————

按下F改方块颜色

在这里插入图片描述

在这里插入图片描述

让盒子变颜色的诉求是从角色发出,现想让他从cube发出:

自定义函数,改成纯函数

Q:在客户端是否所有对象都可以执行RPC?

不是,cube不属于当前客户端,属于服务器,所以不具备借助当前终端的Connection向服务器带消息。

  • 执行RPC的前提是此Actor需要在网络上被复制(Replicates)
  • 服务端,权威,RPC三种通讯方式均可
  • 客户端,只有当Actor属于当前终端时,才可以在Actor身上执行Server调用。
    在这里插入图片描述

在客户端中,当前终端的PlayerController,Pawn,PlayerState的所有权均属于当前终端。

修改所有权

Actor的所有权是可以修改的

修改动作必须发生在服务器,调用Actor成员函数SetOwner即可

在这里插入图片描述

例如:玩家拾取地上的枪械时,没有拾取时,枪械没有归属关系,当拾取后,枪械所有权要修改给拾取玩家所在终端的PlayerController。

随机数种子

在这里插入图片描述

在服务端上调用RPC

Actor所有权未复制NetMulticastServerClient
Client-Owned Actor在服务器上运行在服务器和客户端上运行在服务器上运行在Actor的所属客户端上运行
Server-owned actor在服务器上运行在服务器和客户端上运行在服务器上运行在服务器上运行
unowned actor在服务器上运行在服务器和客户端上运行在服务器上运行在服务器上运行

在客户端上调用RPC

Actor所有权未复制NetMulticastServerClient
Owned by invoking client(当前终端所有权)在执行调用的客户端上运行在执行调用的客户端上运行在服务器上运行在执行调用的客户端上运行
Owned by a different client(当前终端所有权)在执行调用的客户端上运行在执行调用的客户端上运行丢弃在执行调用的客户端上运行
Server-owned actor在执行调用的客户端上运行在执行调用的客户端上运行丢弃在执行调用的客户端上运行
unowned actor在执行调用的客户端上运行在执行调用的客户端上运行丢弃在执行调用的客户端上运行

总结

  • RPC必须从Actor上调用
  • RPC在蓝图中是通过”事件“来完成的
  • 只有当Actor对象在网络中开启了Replicates,才可以完成RPC动作
  • 一般来说Client,Multicast在服务器调用,Server在客户端调用
  • 区分当前对象所在终端的方法是通过网络身份判定,网络身份只有当对象开启了网络同步才可以获得。
  • 修改对象所有权需要在服务器完成,并且所有者设置到终端的PlayerController上
  • PlayerContoller负责网络的链接工作,当设置Actor的Owner后,该Actor在PlayController终端上可以执行Server动作
  • 48
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值