Unity3d網絡總結(二)使用NetWorking代碼搭建簡單的網絡模塊


上一篇文章(http://www.cnblogs.com/dabaimifan/p/7212615.html)介紹了通過給物體添加NetWorking相關組件實現簡單的搭建一個網絡,本文通過C#代碼搭建一個簡單的網路,詳細解釋會在代碼里注釋,供新手學習使用

首先,引入UnityEngine下的NetWorking命名空間,並初始化相關對象,提前創建好預設體並放入Resources文件夾下,這里需要注意的是在Start里調用方法讓程序保持在后台運行,不然客戶端會連接不上服務器(后台),

public class NetManager : MonoBehaviour {
    //創建客戶端
    NetworkClient MyClient;
    //創建預設體   網絡對象
    GameObject playerPre;
    void Start ()
    {    
        //保持程序后台運行
        Application.runInBackground = true;
playerPre
= Resources.Load("Player") as GameObject; //初始化客戶端 MyClient = new NetworkClient(); }

然后寫 創建服務器的方法

 //創建服務器的方法
    public void InitServerAction()
    {
        if (!NetworkServer.active)
        {
            //創鍵並開啟服務器,服務器開始監聽
            // 默認ip地址 為127.0.0.1
            NetworkServer.Listen("127.0.0.1", 1345);
            Debug.Log("服務器已經開啟");
            //給服務器注冊回調方法(ServerAddPlayerCallback)
            NetworkServer.RegisterHandler(MsgType.AddPlayer, ServerAddPlayerCallback);
            //將服務器也初始化 為一個客戶端    
            MyClient = ClientScene.ConnectLocalServer();
            //注冊客戶端連接之后的回調方法(ClientConnectServerCallback)
            MyClient.RegisterHandler(MsgType.Connect, ClientConnectServerCallback);
        }
    }

寫服務器添加玩家后的回調方法(ServerAddPlayerCallback) 與客戶端連接之后的回調方法(ClientConnectServerCallback):

//服務器接收客戶端發送的添加游戲玩家之后執行的回調方法
    void ServerAddPlayerCallback(NetworkMessage msg)    
    {
        //創建一個游戲對象
        GameObject player= Instantiate(playerPre,new Vector3(0,0,0),Quaternion.identity);
        //將創建的網絡對象的權限賦值給客戶端
        NetworkServer.AddPlayerForConnection(msg.conn, player,31);
        //將該玩家的對象卵生到所有連接服務器的客戶端
        NetworkServer.Spawn(player);
    }
//客戶端連接之后的回調方法
    void ClientConnectServerCallback(NetworkMessage msg)      
    {
        //告訴服務器准備完畢
        ClientScene.Ready(msg.conn);
        //向服務器注冊預設體(預設體必須是網絡對象)
        ClientScene.RegisterPrefab(playerPre);
        //向服務器發送添加游戲對象的請求
        //服務器在接收這個請求之后會自動調用 添加游戲玩家的回調方法
        ClientScene.AddPlayer(31);
    }

再寫一個客戶端連接服務器的方法:

//客戶端連接服務器的事件
    public void ClientConnectServerAction()
    {
        //連接服務器
        MyClient.Connect("127.0.0.0", 1345);
        //注冊客戶端連接之后的回調方法
        MyClient.RegisterHandler(MsgType.Connect, ClientConnectServerCallback);
    }

最后我們用GUI添加兩個Button綁定事件

private void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10,100, 30), "server"))
        {
            InitServerAction();
        }
        if (GUI.Button(new Rect(10, 50, 100, 30), "client"))
        {
            ClientConnectServerAction();
        }
    }

效果圖

運行,點擊Server創建服務器

打包程序並運行,點擊Client連接服務器

 

簡單的網絡搭建完畢,這里用到的都是Unity自帶的封裝好的NetWorking,下一篇文章分享一下Socket的簡單搭建


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM