一:传统的使用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,。。。很好用