【UE4】网游开发中的RPC和OnRep(一)
本文转自我的公众号—游戏开发手账
转载请标明出处
如果你在测试的时候发现Client和Server中的子弹没有同步,
or你扔一枚炸弹却听到重叠的爆炸声…
撞了空气?
刚刚接触网络同步的时候,很有可能会出现这样的现象,开了一个Listen Server,然后在Client中跑来跑去,撞撞箱子,打打箱子…
然后发现人物撞着撞着撞不到箱子了,像是被什么看不见的东西挡住了,然后试着开枪打,发现箱子被你打飞了,但是在Server中箱子竟然还在原地。
这是因为你的抛射物子弹没有同步到Server,Server并不知道你用projectile将箱子打飞了,这时,你需要使用远程过程调用(RPC)进行Client和Server之间的通信。
RPC的声明有三种:
- 将某个函数声明为在服务器上调用,但在客户端执行
- 将某个函数声明为在客户端上调用,但在服务器执行
- 从服务器调用,在服务器和当前所有连接的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()<