U3d:关于局域网网络通讯的用法

一:传统的使用networkview  方法,传递的时候添加【RPC】反射属性,使用networkview调用rpc方法,传递方法名,方法参数等等,不可取 相当麻烦,高版本已经剔除

二,引入UnityEngine.Networking名称空间,使用类NetworkServer和NetworkClient类进行自定义创建服务端和客户端

三:使用NetworkManager创建服务端和客户端,本来这个组件适合cs,魔兽争霸类似的既可以当服务端和客户端的,可以创建房间的那种,不过在这边强行用作控制台和客户端

   关键的部分来了,新建两个工程,服务端和客户端的项目版本必须统一,否则的话networkmanage会报错

    自己新建两个脚本继承networkmangager类,然后重载其中的函数,分别为MyServer : NetworkManager和MyClient : NetworkManager,内容自定义

    注意,切记,一定, 先在服务端创建player预制体,创建好之后将需要传递数据的脚本挂载到预制体上,然后将预制体拖曳到 networkManager组件上

 

 请注意,每一个绑定了networkidenty的预制体都有一个独一无二的AssetID,如下图,所以当客户端和服务端能正常连通,服务端可以正常实例player,客户端无法正常实例player的错误通常都是这个锅。。。。。。。。。,错误的做法是在客户端自己新建了个预制体,服务端新建了预制体,两个预制体的AssetId属性不一样,导致错误。

正确的做法,服务端新建预制体player,导出它,然后放到客户端里面保证该属性一致,然后就可以完美的通信了。

推荐方法,有成熟的反射属性进行操作,使用起来比较灵活,简单,数据通讯也是,这个坎耽搁了好久2天,真是坑。

 

 

四:使用socket通讯,肯定可以就是写法比较麻烦,处理异步等等其他一系列的问题,数据同步也得重写

五:使用TNet等外部插件,还不如Networkmanager组件,不用了

六:使用photon服务器,搭建,。。。。

七:使用网页做服务端websocket通讯,客户端再unity上使用websocket协议进行数据接收发送解析等一些列操作,也可以的,推荐的插件besthttp,。。。很好用

 

 

 

 

 

 

 

 

 

  

posted @ 2020-11-12 16:25  怪力~乱神  阅读(683)  评论(0编辑  收藏  举报