1.Network.Player
擷取本地NetworkPlayer執行個體NetworkPlayer,一個可以從網絡定位玩家的資料結構。我們來看一下API的檢視一下包含的變
量:NetworkPlayer.ipAddress
IP我們可以得到這個參數的IP位址,NetworkPlayer.externalIP得到外網的IP,port和external
port可以的到端口和外網的端口。内網跟外網的差別大家可以去查一查,個人了解就是一個區域網路和外部網絡。GUID這個我也不清楚什麼東西,就是知道在
初始化伺服器的參數,具體功能後面再說,對其運作機制的有興趣的朋友可以查一查。
2.OnServerInitialized()當Network.InitializeServer被調用并完成時,在伺服器上調用Network.InitializeServer(connections : int, listenPort : int, useNat : bool)初始化伺服器Network.Instantiate()執行個體化預設,我們看一看他的參數:connections是允許的入站連接配接或玩家的數量,listenPort是要監聽的端口(如果不知道什麼是端口的,自己查檢視吧,我真不想說),useNat設定NAT穿透功能。如果你想要這個伺服器能夠接受連接配接使用NAT穿透,使用facilitator,設定這個為true(打臉啊,這麼快就出來了)。
3.OnPlayerConnected()當一個新玩家成功連接配接時在伺服器調用。
4.OnSerializeNetworkView() 自定義變量同步。後續會有這個函數的講解。
5.OnPlayerDisconnected()當一個玩家從伺服器上斷開時在伺服器端調用Network.RemoveRPCs(player)移除所有屬于這個玩家的ID的RPC函數
Network.Destroy()跨網絡銷毀該物體(本地和遠端)
6.OnDisconnectedFromServer()當失去連接配接或從伺服器端斷開時在用戶端調用
7.Network.peerType端類型的狀态,即disconnected, connecting, server 或 client四種NetworkPeerType 描述作為由Network.peerType傳回的網絡接口端類型的狀态
8.Network.connections所有連接配接的玩家
9.NetworkView網絡視圖,定義什麼在網絡上同步和如何同步Gameobject.networkView 附屬于這個遊戲物體上的網絡視圖networkView.RPC()遠端過程調用
10.Network.Disconnect() 關閉所有開放的連接配接并關閉網絡接口。
了解了上面的函數之後,我們先做一個簡單的連接配接。
[AppleScript]純文字檢視複制代碼
// Use this for initialization
//定義遠端連接配接IP位址
private string remoteIP = "127.0.0.1";
//定義遠端的端口号
private int remotePort = 10000;
//限制連接配接數量為15個使用者
private int connectCount=15;
//是否啟用網絡位址轉換器
private bool useNAT=false;
void OnGUI() {
switch (Network.peerType) {
case NetworkPeerType.Disconnected:
//伺服器未開啟時,開啟伺服器
StartConnect();
break;
case NetworkPeerType.Server:
//成功連接配接伺服器
OnServer();
case NetworkPeerType.Client:
case NetworkPeerType.Connecting:
}
(這尼瑪貼不了圖了,湊合着看吧);這段斷代碼做了一個簡單的判斷,其中Network.peerType用來判斷網絡的連接配接狀态(是否連接配接,是用戶端還是服務端);
繼續:
void StartConnect(){
remoteIP=GUI.TextField(new Rect(10,30,100,20),remoteIP);
if(GUI.Button(new Rect(10,50,100,30),"建立伺服器")){
Network.incomingPassword="UnityNetwork";
NetworkConnectionError error=Network.InitializeServer(connectCount,remotePort,useNAT);
Debug.Log(error);
if(GUI.Button(new Rect(10,85,100,30),"連接配接伺服器")){
NetworkConnectionError error=Network.Connect(remoteIP,remotePort,"UnityNetwork");
這個函數表示服務端的連接配接。
void OnServer() {
GUILayout.Label(" 服務端建立成功。等待連接配接····");
//得到的IP與端口
string ip=Network.player.ipAddress;
int port=Network.player.port;
GUILayout.Label(" ip位址:"+ip+".\n 端口号碼:"+port);
//連接配接到伺服器的所有用戶端
int connectLength=Network.connections.Length;
//周遊所有用戶端并擷取IP與端口号
for(int i=0;i
GUILayout.Label(" 連接配接的IP:"+Network.connections.ipAddress);
GUILayout.Label(" 連接配接的端口:"+Network.connections.port);
if(GUI.Button(new Rect(10,140,100,30),"斷開連接配接"))
{
//從伺服器上斷開連接配接
Network.Disconnect(200);
///
/// 當有新的使用者連接配接進來時
void OnPlayerConnected(NetworkPlayer player){
Debug.Log("新連接配接入用戶端:"+player);
SendMessage("createPlayer",player);
//networkView.RPC("OnNetworkLoaded",RPCMode.Others,player);
/// 當現有使用者斷線時
void OnPlayerDisconnected(NetworkPlayer player) {
Debug.Log("清除對象: " + player);
Network.RemoveRPCs(player);
Network.DestroyPlayerObjects(player);
/// 目前腳本作為用戶端時 成功連接配接到伺服器時 調用目前方法
void OnConnectedToServer(){
Debug.Log("用戶端成功連接配接上伺服器了!!!");
好了,到此為止,建立連接配接的腳本已經建立完成。下次更新資訊同步的功能。
SendMessage("createPlayer",player);這個資訊發送無法執行,因為“create Player”方法在另一個腳本中,如果有朋友想要嘗試運作此腳本,将這個方法暫時注掉就可以了。