前言
最近在鼓搗網(wǎng)絡(luò)同步相關(guān)的東西,略有心得,故此打算寫些心得和感悟,也方便以后重溫復(fù)習(xí).
1.在Unity中配置網(wǎng)絡(luò)
雖然在Unity中有個(gè)自帶的掛在GameObject上的Network組件,但這篇文章為了講解清楚,就不介紹這些組件了,我們使用C#代碼來搭建網(wǎng)絡(luò)模塊,Unity網(wǎng)絡(luò)編程相關(guān)需要引入UnityEngine.Networking 命名空間.
1.1 啟動(dòng)服務(wù)端
以下是創(chuàng)建一個(gè)Server的代碼
using UnityEngine.Networking;
// 啟動(dòng)服務(wù)器
public bool StartServer()
{
// 注冊(cè)消息回調(diào),當(dāng)Server收到指定類型的消息時(shí),會(huì)回調(diào)注冊(cè)好的方法
NetworkServer.RegisterHandler(MsgType.Connect, OnClientConnected);
NetworkServer.RegisterHandler(MsgType.Disconnect, OnClientDisConnected);
NetworkServer.RegisterHandler(MsgType.Error, OnError);
// 監(jiān)聽20086端口
bool succeed = NetworkServer.Listen(20086);
if(succeed )
Debug.LogWarning("服務(wù)器成功啟動(dòng)!");
else
Debug.LogErrorFormat("服務(wù)器無法啟動(dòng),端口為{0}", 20086);
return succeed;
}
僅僅幾行代碼,服務(wù)端的啟動(dòng)功能就完成了,成功啟動(dòng)的話,會(huì)返回true
,如果啟動(dòng)失敗,可以查看一下端口是否被占用了.此外,服務(wù)端還有一些配置相關(guān)的東西,在此就不做細(xì)講了,可參考NetworkServer.Configure
1.2 啟動(dòng)客戶端
接下來,創(chuàng)建一個(gè)客戶端,其實(shí)跟Server的很類似,代碼如下:
using UnityEngine.Networking;
// 啟動(dòng)客戶端
public void StartClient()
{
// 創(chuàng)建NetworkClient對(duì)象
client = new NetworkClient();
// 注冊(cè)消息回調(diào),當(dāng)Client收到指定類型的消息時(shí),會(huì)回調(diào)注冊(cè)好的方法
client.RegisterHandler(MsgType.Connect, OnConnectedServer);
client.RegisterHandler(MsgType.Disconnect, OnDisConnectedServer);
client.RegisterHandler(MsgType.Error, OnError);
// 連接服務(wù)器
client.Connect("127.0.0.1", 20086); // 服務(wù)器IP 服務(wù)器端口
}
客戶端調(diào)用Connect
方法向服務(wù)器發(fā)送連接請(qǐng)求,當(dāng)連接成功時(shí),
服務(wù)端會(huì)回調(diào)OnClientConnected
方法,
客戶端會(huì)回調(diào)OnConnectedServer
方法,
需要注意的是,當(dāng)連接成功時(shí),需要把NetworkMessage
中的NetworkConnection
保存起來,這個(gè)對(duì)象是 客戶端與服務(wù)端的連接的封裝 ,后續(xù)接收消息包/發(fā)送消息包需要用到.
private void OnClientConnected(NetworkMessage netMsg)
{
Debug.LogWarning("OnClientConnected");
connections.Add(netMsg.conn); //保存NetworkConnection對(duì)象,代表C/S之間的連接
}
另外,客戶端的配置信息,可參考NetworkClient.Configure
1.3 效果圖
開啟兩個(gè)Unity,一個(gè)作為服務(wù)端,另一個(gè)作為客戶端.制作兩個(gè)按鈕,一個(gè)啟動(dòng)服務(wù)端,另一個(gè)啟動(dòng)客戶端.
首先啟動(dòng)服務(wù)端,然后再啟動(dòng)客戶端.服務(wù)端打印如下:
客戶端打印如下:
3.結(jié)語
就這樣,很輕松的在Unity中搭建了網(wǎng)絡(luò)模塊,下一篇文章將說明如何實(shí)現(xiàn)<服務(wù)端與客戶端之間通信>.