Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
首先个人说说题外话,Unity3d使用的网络库核心是用C++实现的一款商业网络游戏引擎库。
RakNet。所以对于移动设备来说,用Unity3d来写server是全然能够的,而且内建网络库的各项功能封装完好。
对于一款ARGP都能够轻松的上手来写server,游戏对象的处理或者同步对象使用RPC。
对于一般的手游来说省了不少的麻烦事。
其网络性能也不亚于普通的HTTP传输协议
Unity3d中的内建网络核心是使用Network函数。使用Network能够创建一个server。
也能够建立一个到server的连接。使用Network.InitalizeServer(int maxConns, listenPort, boo useNat)来初始化一个server,
这里仅仅是指定了本地server的port,并没有指定ip地址。假设是本机。直接使用127.0.0.1就可以。
假设电脑已经联网,Unity3d会指定公网IP地址。或者127.0.0.1。作为server默认连接地址。
假设server初始化成功。在Network的回调函数中。会调用
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
:)
最新文章
- Sql Server 常用操作
- js控住DOM实现发布微博简单效果
- 【学习整理】Tarjan:强连通分量+割点+割边
- 转:Apache和Nginx运行原理解析
- .NET中常见对象
- C#怎么得到主机名,IP,MAC
- vSphere文档中心
- Gamit的安装
- C#如何给PDF文档添加注释
- (转)Unity3D 之插值计算
- 【一天一道LeetCode】#117. Populating Next Right Pointers in Each Node II
- Spring 中 IoC 容器简介
- [Android源码]Android源码之高仿飞鸽传书WIFI热点搜索与创建(一)
- Android - Resource 之 Menu 小结
- 【bzoj1089】严格n元树
- RxJava【创建】操作符 create just from defer timer interval MD
- Memcached服务器上实现多个实例(约约问题排查)
- thinkphp 连接mssql 当local失效时
- 分布问题(二元,多元变量分布,Beta,Dir)
- .NET&;C#的异常处理
热门文章
- poj 1260 Pearls(dp)
- jsoi2014前两轮回眸
- Java和.NET在开发中的不同盘点
- BZOJ2668: [cqoi2012]交换棋子
- BZOJ3792: 跑步
- Gentoo源码安装图解
- js jquery版本的 金额千分位转换函数(非正则,效率极高)
- iOS使用WSDL2ObjC工具调用Webservice接口
- The type or namespace name '****' could not be found (are you missing a using directive or an assembly reference
- HDU 5534 Partial Tree 完全背包