UE RPC 调用失败的情况

今天我遇到的一点就是

调用RPC函数的对象一定得是 客户端本地的那个对象(服务器没有这个限制  服务器的玩家对象都有一个PlayerController) 

也就是 客户端本地控制对象  大概是因为这个对象有一个PlayerController 这个玩家控制器 在服务器还是有连接副本的  在客户端除本地玩家操作的对象 在此客户端的其他客户端操作的玩家对象是没有控制器的  这些对象只是服务器端的副本 

ue 的多人游戏中 玩家控制器(PlayerController) 只有服务器有所连接客户端的所有玩家控制器(PlayerController) 客户端只有自己本地的那一个  没有其它的 在客户端上的除本地玩家控制的对象以外 其它玩家控制的对象 在该客户端上 没有控制器 直接就是NULL

所以本客户端的其它玩家的副本对象 想要调用RPC函数的话

那便需要 获取该客户端的本地对象 去调用  使用想要调用RPC函数的对象成为参数 去拿到服务器该对象对应的副本 来进行服务器调用 

如图ServerBloodChanged 函数 是一个RPC函数  这个函数是我客户端 扣血到零时 我要发送到服务器看看是否是零  

我把扣血逻辑让客户端也可以自己扣 注意这样的话服务器和客户端就会 不一致

左窗口是客户端  右窗口是服务器端

现在我左边的血量和右边不一致  因为我给客户端自己算了

当客户端攻击服务器对象副本的血量为零时 我便要 使用ServerBloodChanged函数 发送到服务器去验证  看看攻击的服务器对象副本对应的 服务器的对象的血量是否为零 让服务器往下分发一下 血量 

这里便是我们 在客户端上使用RPC函数 ( ServerBloodChanged 函数)   

由于服务器在客户端上的副本没有PlayerController  无法发送到服务器  所以要使用  本客户端上的 本地PlayerController的拥有对象 去调用这个RPC函数  

传递到服务器端时  服务器上  在  ServerBloodChanged 函数中的 this指针  是 该客户端上本地PlayerController的拥有对象 在服务器上的副本对象 指针 

所以我们还需要将  之前在客户端上的服务器对象副本 传入RPC函数的参数中 

这样服务器上   ServerBloodChanged 函数中的 AActor*  InstigatorActor 变量 就是服务器上对应的连接对象  

分发时也是使用该参数对象去分发  否则 会出现分发的连接出现错误 

 

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值