热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

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

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

 

 

 

 

 

 

 

 

 

  



推荐阅读
author-avatar
mobiledu2502885977
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有