Unity网络基础--封装一个网络管理类
2017-07-27 19:23
183 查看
将服务器和客户端封装为一个网络管理类
一、可以创建服务器,关闭服务器二、乐意连接和断开服务器
三、客户端连接后实例化一个对象
四、客户端能够控制玩家移动并同步至服务器
Server端UI搭建(Text:提示框)
Server端具体代码如下
pubulic class ServerScripts:MonoBehaviour{ public Text warnningText;//提示框 public GameObject cubePrefab;//预设体 void Awake() { Application.runInBackground = true; } public void StarServerAction() { //1.判断当前网络状态 if(Network.peerType == NetworkPeerType.Server){ warnningText.text += "服务器已经开启\n"; return; } //开启服务器 //(最大连接数,端口号,是否Nat) Network.InitializeServer(15,23456,false); } //服务器创建成功后的回调 void OnServerInitialized() { warnningText.text += "服务器创建成功\n"; } //有新玩家加入后的回调 void OnPlayerConnected() { warnningText.text += "有新玩家连人\n"; } //玩家与服务器断开连接后调用--触发在客户端 //player代表掉线的玩家 /* * NetworkPlayer * ipAddress :内网IP * port: 内网端口 * GUID:当前游戏中游戏玩家的唯一ID * externIP:外网IP * externPort:外网端口 * */ void OnPlayerDisconnected(NetworkPlayer player) { warnningText.text += player.ipAddress+":玩家与服务器连接断开\n"; } //在服务器端创建对象 public void CreateObjectAction() { Network.Instantiate (cubePrefab, Vector3.zero, Quaternion.identity, 0); } }
服务器端代码工作做完后,在Unity中关联对应按钮触发的事件并添加好控件和预设体.
Client端UI搭建
Client端的实现
public class ClientScripts : MonoBehaviour { public InputField ipInput;//IP输入 public InputField portInput;//端口输入 public Text warnningText;//提示Text public GameObject cubePrefab;//预设体 void Awake() { Application.runInBackground = true; } //连接服务器 public void ConnectToServerAction() { //判断当前网络状态 if (Network.peerType == NetworkPeerType.Client) { warnningText.text += "已经连接了服务器\n"; return; } //判断IP地址和端口是否为空 if (ipInput.text.Length > 0 && portInput.text.Length > 0) { //连接指定IP地址和端口号的服务器 Network.Connect (ipInput.text, int.Parse (portInput.text)); } else { warnningText.text += "IP地址和端口号不能为空\n"; } } //客户端连接服务器成功后的回调 void OnConnectedToServer() { warnningText.text += "成功连接服务器\n"; } //客户端连接服务器失败后的回调 void OnFailedToConnect() { warnningText.text += "连接服务器失败\n"; } public void BreakConnectAction() { //断开与服务器的连接 Network.Disconnect(); } void OnDisconnectedFromServer() { warnningText.text += "与服务器连接断开\n"; } public void CreateObjectAction() { /* *NetworkView : 网络预设体必须添加的组件 *用于同步预设体的信息:transfrom。刚体,脚本,Animator *每一个组件只能同步以上中的一个 *每个网络预设体可以添加多个NetworkView组件 * */ //创建网络对象 //(网络对象的预设体) Network.Instantiate(cubePrefab,Vector3.zero,Quaternion.identity,0); } }
最后还需要给cubePrefab预设体添加移动的脚本,通过判读预设体拥有者(NetworkView.owner)是否和当前Network.player相同使得对象只能被它的所属者控制
测试结果:
相关文章推荐
- 一个iOS项目总结(一):网络接口的封装
- 自己动手写一个 iOS 网络请求库(NSURLSession 初探、封装接口、降低耦合、快速文件上传 )
- 在matlab基础上简单实现一个神经网络算法
- swift 动手写网络请求封装(仿照了一个大神的)不用导入第三方
- 给Android封装的一个简单网络请求框架
- Android网络开发回顾之旅 ② 新年新气象,封装一个esp8266一键配网XSmartConfig , 支持自定义回调。(附带Demo)
- IOS开发之—— 在AFN基础上进行的网络请求的封装
- 【Cocos2d-Js基础教学(6)网络层(弱联网)的封装及使用】
- java基础--20 自己封装一个DateUtil类
- ReactNative基础(四)了解ListView的使用、实现GridView效果、编写一个真实网络请求案例
- [基础技能] 网络技术——当在浏览器中输入一个网址并按下回车后发生的事情
- Unity3D学习笔记(四)Unity的网络基础(C#)
- Unity带有网络功能——创建服务,并连接到一个特定的服务
- socket编程之中的一个:计算机网络基础
- iOS开发总结之block回调以AFN为基础封装的网络请求操作类
- Socket网络通信理论基础搜集(TCP/IP协议栈与数据包封装+TCP与UDP的区别)
- ajax基础——如何用原生js封装一个ajax函数
- Unity-导航网络寻路-基础寻路
- 一个比较完善的httpWebRequest 封装,适合网络爬取及暴力破解
- 一个基于qml的网络封装库