翻了半天unity的API,也没有发现可以处理Socket的方法。Unity自己封了个网络处理的类Network,主要用于状态同步。
 似乎是要实现MMO级别的网络应用,只能用C#自己去写了。(Unity不像AS,有直接处理数据包、字节级别的底层函数。至少现在没有。)
我们还是先了解一下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 Player8,结果如下,可以通信。
声明:此篇文档时来自于【狗刨学习网】社区-unity极致学院,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。
Unity 网络通信(一)Unity Network 初步
原文:http://blog.csdn.net/book_longssl/article/details/44682685