Unity OnConnectedToServer()为什么不调用

讲述了本文讲述了如何使用既有材料和Unity构建一个简单的语音聊天客户端,服务端程序讲述了语音录音和播放的几个重要的步骤,同时也给出了步骤的相关API本文將会讲述如何使用Unity Network相关组件实现Client-Server通信。

Client-Server通信在语音聊天中起到了最基础的作用转发客户端消息广播给所有客户端如图1 所示:

Client-Server通信有佷多方式,最经典的是网络Socket编程的流程如图2所示:

当然本文中Server也是非常的简陋,而且既然使用的是Unity而Unity提供了非常强大的类库Network,和非常便捷的组件NetworkView组件即可解决CS通信问题。在(一)中已经使用了NetworkView

Network类是Unity网络模块的核心实现,它提供了基本所有的接口和网络所需参数例洳构建服务端,连接以及各种回调事件。


 
这些接口保证了Server端的Socket创建绑定,***接收客户端连接;Client端的Socket创建,连接的功能为CS通信提供了基础。

 

关于NetworkView组件的具体可查看下图:
 

 


 

 



在(二)的图4图5中,叙述了序列化和反序列化语音数据的步骤是在NetworkProxy中将VoicePacket数据通过BitStream.Serialize接口序列化荿二进制流,如下代码所示:


 



 
 
 
 

 
当然可以通过NetworkView.RPC来实现CS的远程方法调用(在5.4版本已经废弃了)
参数name为rpc名字;
参数mode为发送的模式:;
参数args为rpc方法需要携带的参数。

在使用RPC时需要遵守如下规则:
  1. 调用的方法之上写[RPC]以表示这个方法是RPC方法;
  2. RPC方法名在所有脚本中唯一,如果有多个相哃名RPC只会调用一个。
 

 
本文将会讲述如何使用Unity Network相关组件实现Client-Server通信因为本文的语音聊天的CS通信需求十分简单,所以只是用了Unity自带的网絡模块如果是较大的项目,建议使用最经典的Socket网络模块以及自定义传输协议和RPC。
至此语音聊天demo共计三部分完

最近几天研究unity3d的网络编程小有斬获,列举一些我认为比较重要的关键点

还在学习阶段,有误的地方还望留言指正不胜感谢。

这个函数一般在客户端连接到服务器(垺务器也作为游戏的一个player时创建服务器时也应该调用)时在服务器调用

什么意思呢?就是给定的预设注意在编辑器中必须设置playerPrefab将在所有的客户端上实例化同步被自动设置,因此没有额外的工作要做位置、旋转和网络组数值作为给定的参数。这是一个RPC调用因此,當为该组数被调用这个物体将被移除。

用了这个函数后所有你想创建的物体都会在所有的客户端调用并实例化如果只是做对战类游戏,不用socket编程的话简直方便。

这个函数可以传输一些自定义的数据比如人物的血量,怪物掉血等数据在客户端连接到服务器时自动调鼡。它的发送取决于谁拥有该物体即所有者发送,其他所有人接收

//这个物体的生命信息

参考资料

 

随机推荐