最近开始做一个赛车的局域网项目,看到unity自带的unet网络模块,非常适合我目前这个局域网项目的开发,于是就研究了一下unet。
unet是unity 5 之后推出的新版块,当然了,这个都不重要,重要的是这个模块非常的方便,但是要是使用还是要多多研究官方出的文档,不多说废话,开始学习一下unet吧。
一.Networkmanager 网络管理器
NetworkManager 网络管理器是一个方便的HLAPI类,是用于管理网络的(,当然了,你要是不明白HLAPI是什么意思的话,请传送至:http://www.cnblogs.com/bucky/p/5626950.html )在这个管理器下可以创建服务器、客户端以及控制对游戏场景和角色进行管理。
在新建的scene里面创建一个空物体,名称随便(当然了,为了方便记忆我的名称就是NetworkManager)。然后在空物体上挂上NetworkManager脚本。
Dont Destory On Load:如果在切换场景之后不删除NetworkManager这个组件
Run in Background : 在后台运行
Log Level : 日志级别,显示你的日志在什么情况下打印。
Offline Scene : 服务器或客户端断开连接时显示的场景
Online Scene : 服务器启动时服务器和当前所连接的客户端场景自动切换到这个场景中。
Network info :网络连接设置
Spawn info :创建物体设置
Advanced Configuration : 高级设置
Use Network Simulator : 使用网络模拟器
在 Spawn info 下的选项中最重要的就是playerPrefab,这是在创建用户的同时创建出来的玩家角色,可以在面板中直接拖进去prefab。
NetworkManahgerHUD 简易GUI界面
NetworkManahgerHUD 是unity自带的简易的NetworkManahger 的UI界面,通过这个界面的操作,就可以简单的创建服务器以及客户端了。
在添加完NetworkManager组件后,再添加NetworkManahgerHUD ,运行时即可出现简易的gui界面。
LAN Hose :创建服务器与客户端为一体的用户
LAN Client:创建客户端,后面的是你要连接的服务器的IP地址,由于是在本机操作后面显示的就是localhost
LAN Server Only :创建服务器
Enable Match Maker : 匹配系统(这个匹配系统是指一个玩家,可以创建一个自己随意命名的房间,然后其他玩家可以通过联网去搜索房间,然后加入房间一起游戏)
我先说说怎么使用这个匹配系统:
点击最下方的Enable Match Maker按钮,有一个可以输入的文本框,前面的laber写着"Room Name:",所以在这文本框中输入的即是房间的名称,然后点击上面的Create Internet Match 就能创建房间。
在 "Room Name:"下方有一个Find Internet Match即可寻找房间,找到自己想加入的房间,点击即可加入房间进行游戏。
当然了,在真正的项目里不能是这样的简易UI界面,那么后面再说怎么在自己的UI界面中创建服务器以及客户端 NetworkManager.singleton.StartHost(); NetworkManager.singleton.StartServer(); NetworkManager.singleton.StartClient(); 在 NetworkManager 中已经封装好一个单例,通过单例来创建用户。 除此之外,在进行游戏角色创建的时候,如果是使用的inspector面板拖拽prefab的话,你所有的用户创建出的都是一样的角色,这在游戏中显然是不可以的,所以我们可以在创建用户之后在脚本中自定义创建的prefab,代码如下: //复写 OnServerAddPlayer 再代码中添加玩家预制体 public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId) { //预制体 GameObject playerPrefab = Resources.Load("Cube1") as GameObject; Vector3 playerSpawnPos = Vector3.zero;//玩家产生的初始位置 var player = (GameObject)GameObject.Instantiate(playerPrefab, playerSpawnPos, Quaternion.identity); NetworkServer.AddPlayerForConnection(conn, player, playerControllerId); } 注意:最关键的一点,想要服务器客户端用户同步,playerPrefab 上一定要有NetworkIdentity和NetworkTransfrom脚本。 今天先写到这吧,写的不好勿喷。本文纯属总结平时新接触的内容,如果哪里有错误请指出,谢谢。