首先个人说说题外话,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

:)

Unity3d 网络编程(一)(Unity3d内建网络Network介绍)的更多相关文章

  1. 【TCP/IP网络编程】:01理解网络编程和套接字

    1.网络编程和套接字 网络编程与C语言中的printf函数和scanf函数以及文件的输入输出类似,本质上也是一种基于I/O的编程方法.之所以这么说,是因为网络编程大多是基于套接字(socket,网络数 ...

  2. 第三模块:面向对象&网络编程基础 第2章 网络编程

    01-计算机基础 02-什么是网络 03-五层协议详解 04-传输层详解 05-什么是Socket 06-基于socket实现简单套接字通信 07-在简单套接字基础上加上通信循环 08-客户端与服务端 ...

  3. [C#网络编程系列]专题一:网络协议简介

    转自:http://www.cnblogs.com/zhili/archive/2012/08/11/NetWorkProgramming.html 因为这段时间都在研究C#网络编程的一些知识, 所以 ...

  4. 网络编程---(数据请求+slider)将网络上的大文件下载到本地,并打印其进度

    网络编程---将网络上的大文件下载到本地,并打印其进度. 点击"開始传输"button.将网络上的大文件先下载下来,下载完毕后,保存到本地. UI效果图例如以下: watermar ...

  5. Linux 网络编程基础(1)--网络相关的数据结构及转化函数

    在Linux下进行网络编程,使用的语言一般为C.就个人感受而言,在Linux下进行网络程序的编写,重要的不是代码能力要多强,而是对Linux的网络编程思想的理解和对Linux网络数据结构的掌握.如果想 ...

  6. linux网络编程基础--(转自网络)

    转自 http://www.cnblogs.com/MyLove-Summer/p/5215287.html Linux下的网络编程指的是socket套接字编程,入门比较简单. 1. socket套接 ...

  7. python基础(29):网络编程(软件开发架构、网络基础、套接字初使用)

    1. 软件开发架构 我们了解的程序之间通讯的应用可分为两种: 第一种是应用类:qq.微信.百度网盘.腾讯视频这一类是属于需要安装的桌面应用. 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就 ...

  8. 安卓网络编程学习(1)——java原生网络编程(1)

    写在前面 马上要进行第二轮冲刺,考虑到自己的APP在第一轮冲刺的效果不尽人意,有很多网络方面的小BUG,这里就系统学习一下网络编程,了解来龙去脉,以便更好的对项目进行优化处理. http协议 http ...

  9. Unity3d 网络编程(二)(Unity3d内建网络各项參数介绍)

    这里是全部Unity3d在网络中能用到相关的类及方法.纵观參数功能, Unity3d来写一个手游是不二的选择: RPC 能够传递的參数 int float string NetworkPlayer N ...

随机推荐

  1. 1701. Ostap and Partners(并查集-关系)

    1701 又是类似食物链的这一类题 这题是找与根节点的和差关系 因为0节点是已知的 为0  那么所有的都可以转换为与0的和差关系 可以规定合并的两节点 由大的指向小的 然后再更新和差关系 有可能最后有 ...

  2. vbox android x86 分辨率

    D:\Program Files\Oracle\VirtualBox>VBoxManage setextradata "android" "CustomVideoM ...

  3. 【转】如何下载并编译Android4.0内核源码goldfish(图文)

    原文网址:http://blog.csdn.net/flydream0/article/details/7070392 关于如何下载Android4.0源码,请查看我的博客内另一篇文章(同样是图文教程 ...

  4. 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.2 安装数据库软件)

    当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.2 安装数据库软件 这部分简短讲 ...

  5. Hadoop中Combiner的作用

    1.Partition 把 Map任务输出的中间结果按 key的范围划分成 R份( R是预先定义的 Reduce任务的个数),划分时通常使用hash函数如: hash(key) mod R,这样可以保 ...

  6. 5.1 CUDA atomic原子操作

    和许多多线程并行问题一样,CUDA也存在互斥访问的问题,即当一个线程改变变量X,而另外一个线程在读取变量X的值,执行原子操作类似于有一个自旋锁,只有等X的变量在改变完成之后,才能执行读操作,这样可以保 ...

  7. IP查找工具——angry IP Scanner

    作用] 若树莓派没有屏幕可通过该工具查找树莓派的IP地址.例如下图的树莓派IP地址可能为192.168.1.107. 图1 IP scan查找树莓派IP地址

  8. SPOJ TEMPLEQ - Temple Queues(二分查找+树状数组)

    题意: 有N个队伍(1 <= N <= 100,000),每个队伍开始有ai个人[0 <= ai<= 100,000,000],有Q个操作[0<=Q<= 500,0 ...

  9. Codeforces Round #138 (Div. 2) ACBDE

    A.Parallelepiped 题意:给一个六面体三面的面积,求12条边的长度和. 题解:因为都是整数,设边长分别为a,b,c,面积为xyz,那么可设x=a*b,y=b*c,z=c*a,简单解方程就 ...

  10. hdu 5533 Dancing Stars on Me

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5533 Dancing Stars on Me Time Limit: 2000/1000 MS (Ja ...