Unity 网络通信(一)Unity Network 初步
2012-08-22 17:32
477 查看
最新消息:在11月2日的开发者大会上,我问了一下unity的人,会不会对网络层进行封装和改进,unity的人表示,最晚5.0,最快4.x版本里,就会加入新的网络通信接口,他们已经在测试阶段了。
翻了半天unity的API,也没有发现可以处理Socket的方法。Unity自己封了个网络处理的类Network,主要用于状态同步。 似乎是要实现MMO级别的网络应用,只能用C#自己去写了。(Unity不像AS,有直接处理数据包、字节级别的底层函数。至少现在没有。如果您要应用于实际,比如做了个网游,那么您需要用unity自带的C#去写一套自定义通信协议来实现。这个我在后面的文章中会写一个示例。)
我们还是先了解一下Unity,看看用Unity自带的组件,如何编写通信,从最简单的开始。
1,新建项目。新建一个项目里面会有一个摄像机。
2,编写服务器端代码cs:
3,把这个代码拖拽到摄像机上。
4,运行程序 File---->Build settings---->Build And Run,选择Web Player
5,服务器端建立完毕,保持服务器端的运行状态。
6,这里可以再新建立个项目写客户端。嫌麻烦也可以像我这样,先把摄像机上的服务器脚本删掉,再把下面的客户端脚本拖拽上去。
客户端代码如下:
7,运行程序 File---->Build settings---->Build And Run,选择Web Player
8,结果如下,可以通信。
[b]附注: 本文大部分代码出自《Unity 3D 游戏开发》,作者宣雨松。[/b]
翻了半天unity的API,也没有发现可以处理Socket的方法。Unity自己封了个网络处理的类Network,主要用于状态同步。 似乎是要实现MMO级别的网络应用,只能用C#自己去写了。(Unity不像AS,有直接处理数据包、字节级别的底层函数。至少现在没有。如果您要应用于实际,比如做了个网游,那么您需要用unity自带的C#去写一套自定义通信协议来实现。这个我在后面的文章中会写一个示例。)
我们还是先了解一下Unity,看看用Unity自带的组件,如何编写通信,从最简单的开始。
1,新建项目。新建一个项目里面会有一个摄像机。
2,编写服务器端代码cs:
using UnityEngine; using System.Collections; public class server : MonoBehaviour { int Port = 10000; //OnGUI方法,所有GUI的绘制都需要在这个方法中实现 void OnGUI(){ //Network.peerType是端类型的状态: //即disconnected, connecting, server 或 client四种 switch(Network.peerType){ //禁止客户端连接运行, 服务器未初始化 case NetworkPeerType.Disconnected: StartServer(); break; //运行于服务器端 case NetworkPeerType.Server: OnServer(); break; //运行于客户端 case NetworkPeerType.Client: break; //正在尝试连接到服务器 case NetworkPeerType.Connecting: break; } } void StartServer(){ //当用户点击按钮的时候为true if (GUILayout.Button("创建服务器")) { //初始化本机服务器端口,第一个参数就是本机接收多少连接 NetworkConnectionError error = Network.InitializeServer(12,Port,false); Debug.Log("错误日志"+error); } } void OnServer(){ GUILayout.Label("服务端已经运行,等待客户端连接"); //Network.connections是所有连接的玩家, 数组[] //取客户端连接数. int length = Network.connections.Length; //按数组下标输出每个客户端的IP,Port for (int i=0; i<length; i++) { GUILayout.Label("客户端"+i); GUILayout.Label("客户端ip"+Network.connections[i].ipAddress); GUILayout.Label("客户端端口"+Network.connections[i].port); } //当用户点击按钮的时候为true if (GUILayout.Button("断开服务器")){ Network.Disconnect(); } } /* 系统提供的方法,该方法只执行一次 */ // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
3,把这个代码拖拽到摄像机上。
4,运行程序 File---->Build settings---->Build And Run,选择Web Player
5,服务器端建立完毕,保持服务器端的运行状态。
6,这里可以再新建立个项目写客户端。嫌麻烦也可以像我这样,先把摄像机上的服务器脚本删掉,再把下面的客户端脚本拖拽上去。
客户端代码如下:
using UnityEngine; using System.Collections; public class client : MonoBehaviour { //要连接的服务器地址 string IP = "127.0.0.1"; //要连接的端口 int Port = 10000; void OnGUI(){ //端类型的状态 switch(Network.peerType){ //禁止客户端连接运行, 服务器未初始化 case NetworkPeerType.Disconnected: StartConnect(); break; //运行于服务器端 case NetworkPeerType.Server: break; //运行于客户端 case NetworkPeerType.Client: break; //正在尝试连接到服务器 case NetworkPeerType.Connecting: break; } } void StartConnect(){ if (GUILayout.Button("连接服务器")){ NetworkConnectionError error = Network.Connect(IP,Port); Debug.Log("连接状态"+error); } } // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
7,运行程序 File---->Build settings---->Build And Run,选择Web Player
8,结果如下,可以通信。
[b]附注: 本文大部分代码出自《Unity 3D 游戏开发》,作者宣雨松。[/b]
相关文章推荐
- Unity 网络通信(一)Unity Network 初步
- Unity 网络通信(一)Unity Network 初步
- Unity 网络通信(一)Unity Network 初步
- Unity 网络通信(一)Unity Network 初步
- NetWork网络_TCP_在unity中初步实现局域网互联效果
- Unity网络通信(二)Unity Network 聊天
- Unity网络通信(二)Unity Network 聊天
- Unity网络通信(二)Unity Network 聊天
- 关于GF的Network模块的一些见解。初步开始了解GF的网络模块。GF版本:3.1.0
- Network——Socket网络通信机制以及实现举例(TCP、UDP等)
- Unity Manual之Network 网络
- Qt通过QNetworkAccessManager实现Http网络通信
- unity开发:Qt C++与unity之间UDP网络通信
- Unity网络通信(三)同步物体
- [Unity通信]一个基于socket的3DARPG网络游戏(二):消息分类处理和json的使用
- DAY09 NETWORK Cisco简单不同网络主机通信
- [Unity热更新]tolua# & LuaFramework(六):网络通信
- [Unity通信]一个基于socket的3DARPG网络游戏(一):建立连接和事件分发
- Unity中C#网络通信和下载保存