伺服器和客戶端間的資料傳遞請參考這篇文章
既然是網路,當然就要有伺服器端(Server)和客戶端(Client)了!
P.S.此程式也可以手機(Client)連線電腦(Server)
先來寫一下伺服器端的程式:
新增一個Project,命名為Server,並新增一個C# script 且命名為ServerScript
開始撰寫程式碼
using UnityEngine;
using System.Collections;
public class ServerScript : MonoBehaviour
{
private int port = 8000;//隨意,範圍為1024~65536
private void OnGUI()
{
//先取得當前連線狀況
if (Network.peerType == NetworkPeerType.Disconnected)//若當前未連線(伺服器未開啟)
{
//顯示Button,Button的文字為Start Server
if (GUI.Button(new Rect(100, 100, 100, 50), "Start Server") == true)
{
Network.InitializeServer(10, port, !Network.HavePublicAddress());//初始化伺服器。第一個參數為連線的人數上限,第二個參數為連線的port,第三個參數為是否要使用NAT
MasterServer.RegisterHost("AAA", "BBB", "CCC");//第一個參數為連線時要搜尋的字串,字串相同則會連線,可使用中文;第二個為遊戲名稱;第三個為遊戲註解;第二個和第三個參數對於連線之間並沒用影響。此程式碼必須寫在初始化伺服器之後,由客戶端搜尋特定的字串(像是這邊為"AAA"),來建立連線。
}
}
else//伺服器初始化成功(伺服器已開啟)
{
//顯示連線的人數,且Button的文字改為Stop Server
GUI.Label(new Rect(100, 150, 100, 50), "人數 = " + Network.connections.Length);
if (GUI.Button(new Rect(100, 100, 100, 50), "Stop Server") == true)
{
Network.Disconnect();//中斷伺服器連線,一旦伺服器中斷則客戶端也會自動中斷
}
}
}
private void OnApplicationQuit()//當應用程式結束時
{
Network.Disconnect();//中斷伺服器連線,一旦伺服器中斷則客戶端也會自動中斷
}
}
將此腳本拖曳到Main Camera上!
再來就是客戶端了:
新增一個Project,命名為Client,並新增一個C# script 且命名為ClientScript
開始撰寫程式碼
using UnityEngine;
using System.Collections;
public class ClientScript : MonoBehaviour
{
void Awake()
{
MasterServer.ClearHostList();//先清除原先的連線列表
MasterServer.RequestHostList("AAA");//搜尋名稱為"AAA"的Server
}
private void OnGUI()
{
//先檢查當前連線狀態
if (Network.peerType == NetworkPeerType.Disconnected)//若是未連線
{
if (GUI.Button(new Rect(100, 100, 100, 50), "Start"))
{
HostData[] data = MasterServer.PollHostList();//取得符合搜尋條件的伺服器列表,並將其儲存到HostData[]內
if (data.Length > 0)//若是有搜尋到,則進行連線
{
Network.Connect(data[0].ip, data[0].port);//開始連線。第一個參數為伺服器端的IP位址,第二個參數為伺服器端的Port (由於只有一台客戶端測試,所以直接使用data[0])
}
}
}
else//若是已連線
{
if (GUI.Button(new Rect(100, 100, 100, 50), "Stop Client"))
{
Network.Disconnect();//中斷客戶端連線
}
}
}
private void OnApplicationQuit()//當應用程式結束時
{
Network.Disconnect();//中斷客戶端連線
}
}
將腳本拖曳到Main Camera上,完畢!
此時伺服器端和客戶端都已經完成了,再來就是測試是否能夠成功連線!
有四種方法:
1.雙開Unity,一個當Server,另一個當Client。
2.將Server和Client各輸出成執行檔,且在同台電腦內執行。
3.將Server或Client其中一個輸出成執行檔,另一個使用Unity執行。
4.找區網內的兩台電腦(或1電腦1手機,但手機必須使用區域網路WIFI)測試。
先開啟伺服器端連線
再來開啟客戶端連線,若是連線成功則Button的文字從Start變成了Stop Client
此時再回去看伺服器端,可以發現人數增加了!
連線成功!
若要設定連線密碼的話...則在伺服器端加入這段程式(必須在初始化伺服器之前完成)
Network.incomingPassword = "ABC";
例如...我加在Start()內
而客戶端則需要在Network.Connect()內輸入密碼:(192.168.0.104為我目前電腦區網的IP)
第三個參數就是密碼了!
若是密碼錯誤,則伺服器端會收到這個錯誤訊息
而客戶端則會收到這個錯誤訊息,說明密碼錯誤。
留言列表