首先我的說說題外話,Unity3d使用的網絡庫核心是用C++實現的一款商業網絡遊戲引擎庫。緩存
RakNet。因此對於移動設備來說,用Unity3d來寫server是全然可以的,並且內建網絡庫的各項功能封裝無缺。網絡
對於一款ARGP都可以輕鬆的上手來寫server,遊戲對象的處理或者同步對象使用RPC。函數
對於通常的手游來講省了很多的麻煩事。性能
其網絡性能也不亞於普通的HTTP傳輸協議spa
Unity3d中的內建網絡核心是使用Network函數。使用Network可以建立一個server。3d
也可以創建一個到server的鏈接。使用Network.InitalizeServer(int maxConns, listenPort, boo useNat)來初始化一個server,code
這裏僅僅是指定了本地server的port,並無指定ip地址。假設是本機。直接使用127.0.0.1就能夠。server
假設電腦已經聯網,Unity3d會指定公網IP地址。或者127.0.0.1。做爲server默認鏈接地址。對象
假設server初始化成功。在Network的回調函數中。會調用blog
void OnServerInitialized(),假設初始化失敗,直接報錯誤信息。
使用Network.Connect(ip, port)可以簡單的鏈接到一個已經開始的服務端,假設鏈接server成功,則會回調
void OnConnectedToServer(), 假設鏈接server失敗。則會回調
void OnFailedToConnect(NetworkConnectionError error),函數裏面封裝了錯誤信息。
並且對遊戲對象的銷燬處理也很是方便。省了對server的壓力。比方一個多人同一時候在線的網絡。有一個即時遊戲公告
但願在線的玩家以及當前不在線的玩家都可以看到。在使用Unity3d的內建功能當server時,可以直接緩存公告
直到玩家上線,而後給玩家展現。
還有比方。有玩家下線。
對於當前玩家的遊戲即時緩存已經沒有了做用,並且會佔用server的資源。
你可以在回調函數裏直接銷燬不論什麼玩家有當前下線玩家信息的玩家。而後通知server本身來銷燬。
這也是RPC的強大之處。
還有ARPG遊戲中建立房間是一件比較麻煩頭痛的事情,而在Unity3d內建網絡庫裏,你可以直接遷移主機信息,
可以臨時將server由client來託管。還有網絡數據同步回調,特別對NetworkView。可以說用Unity3d來寫server
是一個很是不錯的選擇。相信Unity3d,他不是一個免費軟件。
本身主動寫了一個簡單的server建立與client鏈接的實例:
public void StartSvr () { if (Network.peerType == NetworkPeerType.Disconnected) { print("start init & start svr."); Network.InitializeServer(32, port, false); } } public void StartUsr () { // if (Network.peerType == NetworkPeerType.Connecting) { print("svr running noramlize."); Network.Connect("192.168.6.185", port); // } } // callback state for svr void OnServerInitialized() { print("Server initialized and ready."); } void OnPlayerDisconnected(NetworkPlayer player) { Debug.Log("Clean up after player " + player); Network.RemoveRPCs(player); Network.DestroyPlayerObjects(player); } private int playerCount = 0; void OnPlayerConnected(NetworkPlayer player) { Debug.Log("Player " + playerCount++ + " connected from " + player.ipAddress + ":" + player.port); } // callback svr end // callback state for usr void OnConnectedToServer() { Debug.Log("Connected to server"); } void OnDisconnectedFromServer(NetworkDisconnection info) { if (Network.isServer) Debug.Log("Local server connection disconnected"); else if (info == NetworkDisconnection.LostConnection) Debug.Log("Lost connection to the server"); else Debug.Log("Successfully diconnected from the server"); } void OnFailedToConnect(NetworkConnectionError error) { Debug.Log("Could not connect to server: " + error); } // callback usr end
:)