天天看點

[Unity3d] Network 聊天

 在上一個例子基礎上,我們建構一個聊天室程式。

1,首先建立一個新項目,檔案夾名為chat。

2,給接收請求的腳本所綁定的對象,添加網絡視圖元件(聽起來有點繞口)。我們的伺服器腳本是綁定在主錄影機上的,是以點選主錄影機,在菜單上選擇component-->miscellaneous-->Net work View。

3,伺服器端程式:(C# 腳本)

using UnityEngine;  

using System.Collections;  

public class server : MonoBehaviour {  

    int Port = 10100;  

    string Message = "";  

    //聲明一個二維向量   

    Vector2 Sc;   

    //OnGUI方法,所有GUI的繪制都需要在這個方法中實作  

    void OnGUI(){  

        //Network.peerType是端類型的狀态:  

        //即disconnected, connecting, server 或 client四種  

        switch(Network.peerType){  

            //禁止用戶端連接配接運作, 伺服器未初始化  

            case NetworkPeerType.Disconnected:  

                StartServer();  

                break;  

            //運作于伺服器端  

            case NetworkPeerType.Server:  

                OnServer();  

            //運作于用戶端  

            case NetworkPeerType.Client:  

            //正在嘗試連接配接到伺服器  

            case NetworkPeerType.Connecting:  

        }  

    }  

    void StartServer(){  

        //當使用者點選按鈕的時候為true  

        if (GUILayout.Button("建立伺服器")) {  

            //初始化本機伺服器端口,第一個參數就是本機接收多少連接配接  

            NetworkConnectionError error = Network.InitializeServer(12,Port,false);  

            //連接配接狀态  

            switch(error){  

                case NetworkConnectionError.NoError:  

                    break;  

                default:  

                    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);  

            GUILayout.Label("-------------------------------");  

        if (GUILayout.Button("斷開伺服器")){  

            Network.Disconnect();  

        //建立開始滾動視圖  

        Sc = GUILayout.BeginScrollView(Sc,GUILayout.Width(280),GUILayout.Height(400));  

        //繪制紋理, 顯示内容  

        GUILayout.Box(Message);  

        //結束滾動視圖, 注意, 與開始滾動視圖成對出現  

        GUILayout.EndScrollView();    

    //接收請求的方法. 注意要在上面添加[RPC]  

    [RPC]  

    void ReciveMessage(string msg, NetworkMessageInfo info){  

        //剛從網絡接收的資料的相關資訊,會被儲存到NetworkMessageInfo這個結構中  

        Message = "發送端"+info.sender  +"消息"+msg;  

        //+"時間"+info.timestamp +"網絡視圖"+info.networkView  

    // Use this for initialization  

    void Start () {  

    // Update is called once per frame  

    void Update () {  

}  

4,把腳本拖拽到主錄影機上,綁定。

5,運作程式 File---->Build settings---->Build And Run,選擇Web Player

6,伺服器端建立完畢,保持伺服器端的運作狀态。

7,簡單起見,我們這裡不建立項目。先把錄影機上的伺服器腳本删掉,再把下面的用戶端腳本拖拽上去。

用戶端代碼:

public class client : MonoBehaviour {  

    //要連接配接的伺服器位址  

    string IP = "127.0.0.1";  

    //要連接配接的端口  

    //聊天資訊  

        //端類型的狀态  

                StartConnect();  

                OnClient();  

    void StartConnect(){  

        if (GUILayout.Button("連接配接伺服器")){  

            NetworkConnectionError error = Network.Connect(IP,Port);  

                    Debug.Log("用戶端錯誤"+error);  

    void OnClient(){  

        //文本框  

        Message = GUILayout.TextArea(Message);  

        if (GUILayout.Button("發送")){  

            //發送給接收的函數, 模式為全部, 參數為資訊  

            networkView.RPC("ReciveMessage", RPCMode.All, Message);  

        GUILayout.EndScrollView();  

服務端運作狀态:

用戶端運作狀态:

本文轉蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366204,如需轉載請自行聯系原作者