首先我的说说题外话,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
:)