【UE4】网游开发中的RPC和OnRep(一)

【UE4】网游开发中的RPC和OnRep(一)

本文转自我的公众号—游戏开发手账
转载请标明出处

如果你在测试的时候发现Client和Server中的子弹没有同步,
or你扔一枚炸弹却听到重叠的爆炸声…

撞了空气?

刚刚接触网络同步的时候,很有可能会出现这样的现象,开了一个Listen Server,然后在Client中跑来跑去,撞撞箱子,打打箱子…

然后发现人物撞着撞着撞不到箱子了,像是被什么看不见的东西挡住了,然后试着开枪打,发现箱子被你打飞了,但是在Server中箱子竟然还在原地。

这是因为你的抛射物子弹没有同步到Server,Server并不知道你用projectile将箱子打飞了,这时,你需要使用远程过程调用(RPC)进行Client和Server之间的通信。

RPC的声明有三种:

  1. 将某个函数声明为在服务器上调用,但在客户端执行
  2. 将某个函数声明为在客户端上调用,但在服务器执行
  3. 从服务器调用,在服务器和当前所有连接的n个客户端上执行(共n+1)

分别对应在函数声明前添加:

UFUNCTION(Client)
UFUNCTION(Server)
UFUNCTION(NetMulticast)

RPC默认为不可靠,如果要在远端保证调用,则添加关键字Reliable

UFUNCTION(Server, Reliable)

如果需要添加验证,添加关键字WithValidation:

UFUNCTION(Server, Reliable, WithValidation)
让抛射物在Server同样显示出来

对于刚才提出的问题:Client的projectile没有同步到Server具体该如何解决呢?

在角色头文件MultiplayerCharacter.h中,添加函数的Server RPC声明。

void OnFire()<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲倾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值