您的位置:首页 > 理论基础 > 计算机网络

Unity 网络通信(一)Unity Network 初步

2013-09-25 17:28 459 查看


翻了半天unity的API,也没有发现可以处理Socket的方法。Unity自己封了个网络处理的类Network,主要用于状态同步。 似乎是要实现MMO级别的网络应用,只能用C#自己去写了。(Unity不像AS,有直接处理数据包、字节级别的底层函数。至少现在没有。如果您要应用于实际,比如做了个网游,那么您需要用unity自带的C#去写一套自定义通信协议来实现。这个我在后面的文章中会写一个示例。)
我们还是先了解一下Unity,看看用Unity自带的组件,如何编写通信,从最简单的开始。

1,新建项目。新建一个项目里面会有一个摄像机。

2,编写服务器端代码cs:

[csharp] view
plaincopy

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,这里可以再新建立个项目写客户端。嫌麻烦也可以像我这样,先把摄像机上的服务器脚本删掉,再把下面的客户端脚本拖拽上去。

客户端代码如下:

[csharp] view
plaincopy

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,结果如下,可以通信。



附注: 本文大部分代码出自《Unity 3D 游戏开发》,作者宣雨松。

/article/7766438.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: