unity3d 的PRC使用感悟

在使用Unity3D进行网游课程设计时,遇到了RPC的诸多挑战。RPC函数需依附于含有NetworkView的游戏对象,并在Network.connect()之后调用。由于connect是异步的,需要等待才能避免未联网错误。客户端和服务器端都需要实现RPC函数,即使在客户端不实际调用。此外,客户端和服务端的NetworkView数量必须一致,以避免viewID不匹配的问题。RPC还能定向发送信息到特定客户端,避免浪费带宽。参考了Unity3D官方社区解答来解决这些问题。
摘要由CSDN通过智能技术生成

这几天都在用unity3d做网游课程设计,本来做游戏就麻烦了,更别说是做网游,调试起来困难,而且我才刚用这个软件,于是被RPC坑出了一点心得。

我用的是4.1.2f1版本

使用RPC函数,首先脚本依附的gameobject要有networkview成分。然后就是RPC函数需要在Network.connect()之后才能调用,但是connect是异步函数(顺便它切换场景时不销毁,除非又建立了一个新connect),如果connect的下一句就是调用RPC,是会报告没联网的错误,因此需要等一点点时间。


然后就是RPC在客户端和服务器端都要有实现,比如客户端需要RPC调用服务端的login函数,客户端本身也要有login函数的声明,即使你只是RPC( RPCMode.Server)。当然,在你确认客户端不会调用longin这个函数时,你可以在函数里面什么也不写。


还有一个大坑是,客户端的networkview要和服务端的数目要相同。比如,某个场景我给了camera一个,player一个;在服务器那边我给camera一个。当我调用RPC时,它就报错:Could't invoke RPC function 'LoadDictEnemy' because the networkView 'SceneID: 1 Level Prefix: 0' doesn't exist。

估计原因主要是networkview的viewID配对不上,所以我给服务器的camera增加了一个。这时候,客户端的player 的viewID是1,camera是2,;服务端的camera分别是1,2

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值