用 Unity 进行网络游戏开发(一)

这是我之前写的了,一直保存在电脑里,现在学习写博客。希望多和大家交流,共同进步,文章中说得不好的地方请指出,谢谢!
使用Unity3D进行网络游戏开发
一.Unity3d 简介
     Unity3d是时下比较流行的一款游戏引擎,流行是因为用它做游戏很方便,无论是3d还是2d都会有非常好的效果,即便某些朋友不懂编程,也可以通过Unity自带的组件做出一些简单的诸如三维视频游戏、建筑可视化、实时三维动画等类型的小作品。在正式发布前,Unity经历的多年的开发阶段,Gooball在2005三月发布,运用了Unity的预发售版本 开发。Unity从出道到现在已有8年历史,有很多优秀的作品都是用Unity做的,诸如《神庙逃亡》、《绝代双骄》、《坦克英雄》、《将魂三国》、《梦幻国度2》、《新仙剑Online》以及《纵横无双》等。


二.网络游戏简介
  
    网络游戏又称为MMOG(Massivemultiplayeronlinegame)。通常只要某一游戏的服务器端到客户端连线玩家数量超过
1000人即可算作大型多人在线游戏,但是狭义上必须有大量玩家处于同一“游戏世界”的游戏才能称之为大型多人在线
游戏。
    目前网络游戏的分类主要如下:
     1.从使用形式上进行分类:
    浏览器形式和客户端形式。基于浏览器的游戏,也就是通常说到的网页游戏,又称为WEB游戏,它不用下载客户端,任何地方任何时间任何一台能上网的电脑快乐的游戏,尤其适合上班族。其类型及题材也非常丰富,典型的类型有角色扮演(天书奇谭)、战争策略(热血三国)、社区养成(猫游记)、SNS(开心农场)等。 而对于客户端形式这一种类型是由公司所架设的服务器来提供游戏,而玩家们则是由公司所提供的客户端来连上公司服务器以进行游戏,而现在称之为网络游戏的大都属于此类型。此类游戏的特征是大多数玩家都会有一个专属于自己的角色(虚拟身份),而一切存盘以及游戏资讯均记录在服务端。此类游戏大部分来自欧美以及亚洲地区,这类型游戏有World of Warcraft(魔兽世界)(美)、战地之王(韩国)、EVE Online(冰岛)、战地(Battlefield)(瑞典)、信长
之野望Online(日本)、天堂2(韩国)、梦幻西游(中国)等等。

    2.从游戏种类上进行分类:

   棋牌类休闲网络游戏:即登陆网络服务商提供的游戏平台后,进行双人或多人对弈,如纸牌、象棋等,提供此类游戏的公司主要有腾讯、联众、新浪等。网络对战类游戏 :即玩家通过安装市场上销售的支持局域网对战功能游戏,通过网络中间服务器,实现对战,如CS、星际争霸、魔兽争霸等,主要的网络平台有盛大、腾讯、浩方等。角色扮演类大型网上游戏:即RPG类,通过扮演某一角色,通过任务的执行,使其提升等级,等到宝物等,如大话西游、传奇等,提供此类平台的主要有盛大等。


   3.从游戏模式上进行分类:
     这样分类比较多,主要有:一、 MMORPG-大型多人角色扮演类游戏,如时下火爆的《DNF》《DN》《诛仙3》等。二、MMOFPS-大型多人第一人称射击游戏,如《CF》等。三、MMOKTS-大型多人及时策略游戏,这类游戏目前主要以浏览器形式发展而非客户端,如《破碎银河系》等。 四、MMODG-大型多人网络舞蹈游戏,《劲舞团》已经火了很多年了。 五、MMOMG-大型多人网络经营类游戏,这类游戏也是主要依托浏览器形式发展,如《Hattrick》等游戏。 六、MMOR-大型多人网络竞速类游戏,如《跑跑卡丁车》等游戏。 七、MMOTG-大型多人网络大亨类游戏,代表作为《网络大富翁》。 八、MMOSG-大型多人网络体育类游戏,以《街头篮球》为代表。
 
   四.网络游戏的架构:
     一、PTP(Peer-to-Peer)即在多个玩家参与的游戏中,各玩家之间采用Peer-to-Peer的直接通信方式。在网络通信服务的形式上,一般采用浮动服务器的形式,即其中一个玩家的机器既是客户端,又扮演服务器的角色,一般由创建游戏局的玩家担任服务器(主机)。很多对战型的RTS网络游戏都采用这种结构。
     二、基于游戏大厅代理的结构,通过会话大厅(lobby)结构,为不同玩家牵线搭桥,既直接管理客户端,也管理游戏局,是回合制网络游戏的常见类型
     三、网络游戏的最典型的结构是C/S结构,特别适合于多人在线游戏,如RPG,成千上万人进行同一场游戏。服务器上有完整的游戏世界模型,玩家在客户端去观察这个世界,并与之互动。C/S结 构的优点是能够充分发挥客户端计算机的处理能力,很多工作可以在客户端处理后再提交给服务器,使得客户端响应速度快。对于网络游戏来讲,这是十分关键的。 其缺点就是网络游戏的升级比较麻烦,每次升级需要客户端下载体积庞大的更新软件,然后进行安装,对于一些带宽并不是十分充足的用户而言,升级就成了游戏的梦魇。不过,良好的客户端程序框架设计完全可以避免升级时下载庞大的更新软件。比如,客户端软件可以把场景定义文件独立出来,客户端程序在运行时动态加载 场景定义文件。这样,当网络游戏的设计者发现需要增加游戏场景时,他只需要更新一个场景定义文件就可以了,当然还需要一些必需的场景资源文件,如新增加的 图像、背景音效等。


三、使用Unity开发简单的网络游戏
    网络游戏和单机游戏最大的区别就是网络游戏把单机游戏的逻辑判断移到了服务器端。当客户端向服务器发出一个请求后,比如说行走,服务器收到客户端发来的这个数据包,然后读出内容,进行逻辑判断处理,然后把结果从新返回给客户端。客户端收到服务器的回复后,开始进行屏幕渲染,于是就出现了行走的动画了。逻辑判断在服务器端,客户端只负责渲染。把逻辑放在服务器端有一个很明显的好处,就是防止第三方修改数据,即降低玩家“开挂”的可能性。使用Unity进行网络游戏开发,最好不要用Unity自带的NetworkView,选择socket更好,理由如下:(我这里借鉴A哥所总结)
  一、unity network 需要向unity的masterserver服务器注册我们的服务,而socket服务由开发者自己定义
  二、采用socket想要共享哪些数据更加灵活 而network显然是没有这么方便
  三、网络占用 socket在需要的时候 只需要传输开发者定义好的需要交互的数据即可 network则是整个的实时同步 网络占用会高出不少
  四、network是类似于p2p的客户端直连共享模式 需要nat穿透 用户的设备不一定支持。