2013年10月15日星期二

“魂斗罗”值得现代游戏开发者学习的上古神作

 在中国,最早让老外见识到“渠道的力量”的实例,魂斗罗肯定有一份。在世界上两个最大的游戏市场美国和日本,各自都有自己的经典游戏记忆——在上世纪80、90年代,美国人大概是超级马里奥,日本人则是勇者斗恶龙。而魂斗罗,就是属于中国孩子们的独特珍藏。
  20多年过去,这个游戏本来已经差不多被封藏在记忆深处。直到某一天在优酷逛,无意间看到一个视频,是一帮少男少女合奏魂斗罗的系列音乐——居然还是民乐版,当年熟悉的记忆突然在扬琴、二胡、琵琶的交相奏鸣中鲜活了起来。看他们的年纪,魂斗罗流行时应该都还没出生呢。也许他们的老师是一个怀旧的人,又也许这帮孩子的练琴室外间有一台古老的小霸王,用作枯燥练琴时的调剂——那他们就真的复现了这款游戏最辉煌时代的场景。
1
  空前绝后的魂斗罗奇迹
  说魂斗罗是渠道造就的奇迹,是因为在中国刚刚开始出现游戏机这一事物时,每一台游戏机里所带的游戏卡带,几乎都是这盘魂斗罗。KONAMI在1987年时推出这个游戏的街机版和FC(任天堂红白机)版本时,销售业绩也相当不错,但远远没达到在中国玩家群体中近乎100%的覆盖率。在今天看来,这种疯狂流行应该是来自于匮乏——游戏机在那时候是稀罕物,游戏卡更是种类稀少,每机必带的魂斗罗,当之无愧地成为国民游戏。
  即使以今天的眼光看,魂斗罗也是一款非常有特色的游戏。它有完整的故事情节——外星碎片坠落地球造成能量异变,地球联邦派出特种战士去消灭野心家——也有偶像热点,两位主角特种兵的形象分别借鉴了施瓦辛格和史泰龙两位当红的肌肉男;而游戏的声光效果乃至背景音乐,在当时的确都是一流水准。
  不过多年之后再次仔细回忆魂斗罗的难忘,能发现它的乐趣其实最聚集于三个方面。
  首先是如心使臂的操控感。既然我们把游戏定义为“造梦工业”,那必不可少的,就是对这个梦的操控力。魂斗罗在这点上做得异常优秀,尤其是人物的跳跃动作,极为符合物理规律,起跳期的强劲、快到高点时的渐慢、坠下深崖时的加速下落(呃,这点跟操控性无关了),都与人的生活感受一般无二,这就使得操控时具有很强的预期。
  在与同时代其他游戏的对比中,更能凸显这种优秀。超级马里奥在中国一直没能像美国那么大红大紫,我觉得很大一个原因就是操控——马里奥的奔跑带有一定惯性,这可能更为拟真,但却过于复杂,提高了游戏的操控难度,也降低了通过游戏获得“爽”感的程度。另外一款游戏《绿色兵团》,其操控性更是明显不如魂斗罗,人物的跑跳动作都很生硬,虽然与魂斗罗并称四大名卡,其人气却远远不足。
  魂斗罗的第二个乐趣,在于“隐藏”。小伙伴们千辛万苦地一关一关逐个征服,却往往到了第三关就戛然止步——这一关需要极强的双人配合,出的怪也特别多,纵版跳跃的难度也远大于横屏推进。正当大家一筹莫展时,当时稀少的游戏杂志(我记得叫做《家用电器》)上突然刊出了秘诀:上上下下左右左右BA,可以增加到30条命!这就是那个著名的KONAMI秘诀,在该公司的其他很多游戏如沙罗曼蛇中,这个秘诀也可以生效。前不久大热的好莱坞动画片《无敌破坏王》中,反方BOSS进入宝库时,输入的也是这个密码,可见当初KONAMI实在是给全世界的孩子都发了糖。
  既然有这个秘诀在,自然会激发大家的好奇:这个游戏是否还有别的秘技(那时候还不知道有个专用术语叫后门)?大概在魂斗罗流行一年之后,一个新的传言流传开:在某个地方进行特定操作,就可以进入全新的八个关卡,称为“水下八关”。这让刚刚玩腻了游戏的同学们再次摩拳擦掌,展开新的征程。
  自然,没有人打出过这个水下八关,大家都在传说中的入口,第六关末尾那个BOSS处撞得头破血流。那时候没有互联网,谣言完全靠口,也没法查出源头,总之今天想起这个不靠谱的说法,仍然觉得够匪夷所思的(据说后来有高手反编译了整个程序,也没发现有水下八关;不过即使不反编译也能想到,把相当于游戏正片的内容隐藏在那么一个旮旯处,KONAMI图什么啊)。
  尽管被忽悠了,但这种秘诀满天飞的情况却在客观上增加了魂斗罗的生命力,并且在以后多次发生——每个玩儿过仙剑奇侠传的,都曾经为了那个传说中的林月如不死版苦苦打关吧。
  魂斗罗流行的最重要因素在第三点,就是社交。作为一种全新的娱乐方式,游戏机成为每个儿童群体的焦点,能打一盘魂斗罗,熟练地背诵30条命密码,几乎是那时候的社交通行证。而由于主机稀少,拥有者每次游戏叫谁不叫谁、让谁多玩会,就成为考验交情与人脉的试金石。在当时,一次玩魂斗罗的机会,几乎可以作为硬通货在孩子们之间流转——其直接后果也就是真的有人用红白机开了一家游戏店。当然一年后这个店就难以为继,因为人人都能一条命打通关了。
  作为“天下第一卡”,我没有去回忆魂斗罗和KONAMI的商业成功路径,因为写的人已经太多。但是在今天回忆起这个游戏的成功,有些要素却仍然成立,并且经久不衰。这大概才是魂斗罗最宝贵的遗产吧。

如何做手机游戏

 如果你询问成都某一位互联网或者移动互联网创业者成都现在什么行业最热,他会毫不犹豫的告诉你手机游戏。至于这个行业有多热有人说成都有700多家手游公司,也有人说成都只有300多家手游公司。其次是成都2013年下半年将有数十款手机游戏亮相IOS平台,根据成都移动互联网行业人力资源报告目前从事移动互联网就上数万人。面对汹涌澎湃的手机游戏热,剑锋和一位手机小白朋友聊天他告诉我手机游戏应该是这样的。

  一、易注册,低学习和时间成本

  翻看现在市面比较火的游戏有植物大战僵尸2,找你妹,打飞机等等手机游戏,都是用户比较热衷和喜欢的。该朋友告诉为什么喜欢这一些的手机游戏,他给出的回答是不管是植物大战僵尸还是找你妹注册都非常的方面只要直接添加用户名就可以玩游戏,其次是游戏不需要花太多的时间成本和学习成本在上面。游戏操作十分的简单而不是复杂,即学即会。
  对于该朋友的观点剑锋也深有感触如果游戏最开始注册都是复杂的过程,很多玩家都是没有耐心的。其次是游戏最开始的新手教程太长也会抛弃一批玩家,剑锋觉得注册方面尽量的简单,游戏教程上面尽量的简化。因为一般的小白用户耐心都很低,如果需要他长时间去等待一款游戏他是不会接受的。

  二、易操作,低数据包和低流量

  接着他告诉对于一款手机游戏除了注册和教程以外还有游戏容不容易上手,因为是小白用户当然希望游戏操作方面要简单和有趣。例如一直在女性用户中长盛不衰的三消类游戏,不管是在PC端还是移动端都有着大量的用户群。其次是游戏数据不要太大,目前大多数用户还是2G用户在很多用户对于流量还是很现实的。所以在数据包大小和流量方面也是需要游戏开发者考虑的。
  剑锋仔细的听着的同时也在思考确实如这位朋友所说,小白用户对于手机的理解不同于发烧友。在游戏操作方面不能做的太复杂,小白用户大多数都是千元智能机对于手机存储和流量都是有限的,在数据包大小和流量方式开发者应该做到低流量和低数据包。

  三、游戏做工漂亮,能找小伙伴

  记得2013年四川互联网大会上某某大佬就说过,游戏美工都不过关的产品。基本上很难得到渠道商和发行商的认可,该朋友告诉我如果你的游戏画面做的太粗糙和简陋会大大影响玩家的心情。其次是粗糙的画面会让你的游戏显得很山寨,这样的游戏基本上不被认可。还有能够在上面找到一些小伙伴就更好了,这样会大大增加玩家对游戏的依赖度和忠实度。
  剑锋觉得现在移动互联网用户主要还是80后和90后对于游戏都是自己的辨别力,首先应该在游戏画面上做到好看,其次是现在的90后都比较宅希望通过游戏的方式来进行社交,所以就需要一定的社交属性来丰富他们的情感生活。
  总结:通过与这位朋友的简短聊天剑锋也给各位游戏开发者总结一下,小白用户对于手机游戏的要求有注册简单,操作简单,低流量,能社交。相信这些要求也是很多玩家所要求的由于手机屏幕大小的限制和手机上操作的限制,手机流量的限制都制约了游戏的复杂化。沿用乔布斯的一句话“简约至美”。

跨平台打造移动原生应用的10大武器

编译工具对开发者的影响是直观的,开发者使用JavaScript等语言写出应用的代码,再将它们编译成原生代码。通过原生的API,完成跨平台的操作,最终分发到本地的应用商店中。由此可见,编译工具的选择可以直接降低开发成本,整个团队可以间接地快速捕捉市场、提高收益。今天我们为大家介绍了10款主流的原生转换编译工具,开发者们可以根据不同的特点来选取,提高自己编程的效率。
  Adobe Air是针对网络与桌面应用的结合所开发出来的技术,可以不必经由浏览器而对网络上的云端程式做控制,是一款允许你利用现有的web开发技能(包括Flash, Flex, HTML, JavaScript, Ajax)优势,建立和配置跨平台(或跨操作系统)的桌面RIA应用。
  其特点如下:
  • 网络应用离线化:同传统的Web相比,AIR的优势在于有客户端的优势,可以脱机运行程序,在需要的时候偶尔连接一下网络,比如可以离线写博客,发布的时候连接一下网络。
  • 跨平台、低开发成本:跟传统的桌面应用程序相比,AIR程序可以跨平台,支持多操作系统,开发成本较低。
  • 出色的交互表现:AIR凭借Flash技术本身的特征可以带来更吸引人的交互表现,相比其他传统的Web技术要出色。
  • 运行速度更快:因为AIR程序均是在本地运行,而网络应用程序在网络客户端和服务器之间进行调用,需要调用大量数据和代码,所以AIR程序的运行速度要快一些。
  Firemonkey是一个基于CPU/GPU混合架构的业务应用平台,能够帮助开发人员设计出Windows、Mac和iOS设备上的视觉绚丽的本地应用程序。 Firemonkey允许开发人员创建具有快速的本地性能、动画和图像效果、企业级的数据连接以及交互式数据可视化的富HD和3D的图形应用程序。
  使用类似Flash的功能来开发游戏或者应用,虽然不如上面的一些工具简单,但你也无须懂特别高深的编程语言,还能对已有的代码循环利用,开发好之后,可以在电脑或者其它设备上立即进行测试,无需反复导代码。
  4.J2objc
  J2ObjC(Java to Objective-C)是Google出品的一个开源的命令行工具,允许开发者将Java代码转换成适用于iOS平台的Objective-C代码。这意味着,开发者编写的Java代码可以成为iOS应用程序的一部分,且无需对生成的文件进行编辑。 
  J2ObjC支持Java语言和运行时的大部分特性,包括异常、内部类/匿名类、泛型类型、线程和反射等,同时也支持转换和执行JUnit测试。 
  5.Livecode
  LiveCode 原名 Revolution,是一款源自 HyperTalk 的用于快速应用程序开发语言。LiveCode 语法结构和自然语言接近,比较适合编程初学者掌握。此外 LiveCode 具有良好的跨平台支持,可以创建 Linux、OS X 和 Win 桌面应用, Android 和 iOS 手机版的应用,以及无 GUI 的服务器端应用。
  LiveCode 5.X 及更早的运行时环境仅有闭源版本,若想用其进行开源软件开发限制非常大。经过今年年初的 KickStarter 募集后,成功推出改良核心的 6.0 版本,包含了支持拖拽布局的 IDE 和多平台部署分发工具,可安装于 Linux、OS X 和 Win 系统上。
 6.Mono
  Mono是一个由Novell公司(先前是Ximian)主持的项目。该项目的目标是创建一系列符合ECMA标准(Ecma-334 和 Ecma-335)的.NET工具,包括C#编译器和共通用语言运行库。与微软的.NET Framework不同,Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,OS X 和 Solaris。
  J2ME Polish是用于开发J2ME应用的工具集: 从一份源代码中为多种设备和多种语言创建应用的建造工具(build tools)。一个设备数据库,您的应用可以用它通过预处理为不同的手机进行调整。 一套用户界面(GUI),,可以在应用程序代码之外进行设计。 工具类(Utiliy classes),如BitMapFont 和ArrayList。 编辑修改二进制文件的独立工具。 
  8.Qt
  Qt是一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。
  使用Qt的公司包括三维建模(Autodesk Maya)、Adobe Photoshop Elements(Adobe图像处理)、Skype、 VLC 播放器。欧洲太空总署、谷歌、HP、卢卡斯影业和Opera移动浏览器也都有使用Qt技术。
  9.Sencha
  Sencha 是由 ExtJS、jQTouch 以及 Raphael 三个项目合并而成的一个新项目。Sencha Touch 是全球领先的应用程序开发框架,其设计旨在充分利用HTML5、CSS3 和Javascript 来实现最高级别的功能、灵活性和优化。Sencha Touch 是针对下一代具有触摸屏设备的跨平台框架。其特点如下:
  • 基于最新的WEB标准:HTML5,CSS3,JavaScript。整个库在压缩和gzip后大约80KB,通过禁用一些组件还会使它更小。
  • 支持世界上最好的设备。Beta版兼容Android和iOS,Android上的开发人员还可以使用一些专为Android定制的主题。
  • 增强的触摸事件。在touchstart、touchend等标准事件基础上,增加了一组自定义事件数据集成,如tap、swipe、pinch、rotate等。
  • 数据集成。提供了强大的数据包,通过Ajax、JSONp、YQL等方式绑定到组件模板,写入本地离线存储。
  Codename One是一个针对移动应用开发者的、开源的、跨平台的Java工具,旨在帮助Java开发者通过单一代码库来针对所有移动(智能手机和平板电脑)平台构建本地应用。 
  Codename One由Chen Fishbein和Shai Almog开发,这两人都曾供职于Sun公司。Fishbein称,Codename One使移动应用开发工作更加快速、容易,Java开发者可以构建iPhone/iPad (iOS)、Android、Windows Phone、Blackberry等平台上的应用,且无需在应用性能、功能或开发简易性方面妥协。

四款免编程移动游戏开发引擎推荐

      移动游戏的制作,可以说是整个移动应用开发中,最为复杂的。不仅仅所有的窗体和控件要自己设计开发,核心的玩法也要自己创造。而工具类应用,你可以仅仅使用大多数iOS和Android的系统控件和窗体,就能完成一个简单的应用。
  无论如何,热爱游戏的人是不怕麻烦的,移动游戏的开发者亦复如是。对于游戏的整个开发流程来说,更多的是在一点点调试游戏。设置各种参数,不断的对细节进行完善。而技术并不是作出好游戏最大的难题。
  今天Unity、Unreal、Cocos2d-x等游戏引擎大行其道,开发出来的游戏真是高端大气上档次。但编程基础成了很多开发者最大的门槛。其实,移动游戏的开发,并没有想象的那么困难。任何游戏作品的开发,都可以被分解为4个逻辑步骤。Position位置——Motion运动——Collision碰撞——Animation动画。本文将为大家推荐当今市面上比较主流的免编程类移动游戏开发工具和引擎,编程小白的你,同样可以做出低调奢华有内涵的游戏。
  Scirra Construct 2
  官方网址:https://www.scirra.com/
  它是一款基于HTML5的游戏编辑器,由Scirra公司开发。主要针对非程序员人群创建游戏。它可以使用鼠标拖动和拖放的方式,利用可视化编辑器和基于行为的逻辑系统开发游戏。它是经典的Construct升级版本。Construct 2也有一个Javascript框架,可以帮助游戏开发者实现更多功能和特效。
  2013年10月18日,Construct 2被提交到Steam上,11月30日通过了Steam的审核。由此热爱游戏的核心玩家也能DIY自己的游戏了。2013年1月26日,最新版本的Construct 2上架Steam商店
  Gamesalad
  官方网址:http://gamesalad.com/
  它一款新的简易游戏制作工具,它可以让一些非程序员也能为Web、智能手机、平板电脑开发并发布2D休闲游戏。这款新兴的游戏开发工具已经支持使用HTML5来发布新游戏。
  有了GameSalad,游戏开发员无需编码就能为iPhone、iPad、Mac和Web来设计、发布原创游戏。目前,已有16万游戏开发员,利用GameSalad在App Store里发布了16000款游戏。其中有30多款游戏在App Store的游戏分类排行榜的TOP100里榜上有名。
  GameSalad是率先支持使用HTML5发布游戏的游戏创作平台之一,这就可以使用户更简便地将游戏分享到那些不支持Flash游戏的平台中去。因此这款支持HTML5的游戏制作工具有着特殊的意义。
  Stencyl
  官方网站:http://www.stencyl.com/
  它是一个游戏创作平台,允许用户为电脑、移动设备、Web创建2D视频游戏。该软件是免费的,但如果你要通过它发布你的游戏,需要购买授权。该工具最初的名字叫“StencylWorks”,此后改名为Stencyl。这个框架是非常强大,它内置了Box2D和Flixel物理引擎,不仅可以让游戏更加生动,也可以减少对性能的影响。它使用HAXE编程语言和NME游戏框架开发,支持跨平台技术,让你一次开发就能发布到多个平台。
  Stencyl是一个IDE集成开发环境,包含了行为编辑器、地形编辑器、角色编辑器和场景设计器。它允许开发者导入之前创作的场景和背景图像,导入和编辑字体,还包括支持MP3、OGG、WMA音频文件。支持更改游戏设置,包括游戏控制器设置和分辨率设置等。
  由于它提供了海量的免费资源,你可以随意应用到游戏之中,自由地测试它们。这些组件的强力和易用性能让开发人员感到有趣。每个开发人员都可以分享他的图形、游戏逻辑、色阶、动画和所有其他的游戏素材。
  GameMaker
  官方网站:http://www.yoyogames.com/studio
  GameMaker是一款拥有图形界面,可灵活编程,以2D游戏设计为主的游戏开发软件。最初它叫做Animo,后来改名GameMaker。它由Mark Overmars使用Delphi语言开发,于1999年11月发布了首个公开版本,在4.3 版之后转为部分功能收费软件。2007年1月,由英国公司YoYo Games收购,它大力推动了欧美乃至全世界独立游戏界的发展。2012年10月2日,YoYo Games与Valve合作,将这款游戏引擎上架Steam。
  作为一款游戏制作工具,它可以让用户轻松开发视频游戏,而无需学习复杂的编程语言。它支持拖动和拖放的方式,在IDE里开发游戏。为了实现更为复杂的游戏,GameMaker支持GML脚本语言,通过它用户可以进一步控制游戏,对角色、物体和场景进行设计。GML的语法借用了C、C++和Java的方式,支持面向对象编程。
  利用一个拖拽界面创建iOS及Android游戏,曾被用于开发游戏“Froad”(贪吃小怪兽)以及 “Grave Maker”(表演者)。是世界上最广泛使用的游戏开发产品,已经被下载超过1000万次。

Unity几个有用的格斗游戏特效

一、运动轨迹

运动轨迹常常用于表现武器的挥舞效果,在提高速度感的同时又能让玩家看清楚招式动作,所以是常见的一种格斗特效。Unity中可以直接使用TrailRender来实现该效果。
image

二、运动模糊

运动模糊就是保留前几帧影像,形成一定的重影模糊效果,从而突出速度感。配合慢镜头使用往往能很好地表现运动高潮效果。运动模糊在Unity中是通过Motion Blur image effect脚本实现的。

三、景深模糊

景深模糊就是模拟人眼或望远镜的成像原理,对远离视线焦点的场景进行模糊,从而提高画面真实感,同时也迫使玩家注意焦点处发生的事情。虽然该特效在射击游戏中更为常见,但某些情况下也可以用在格斗游戏中。例如团队作战时以这种方式显示队友发生的重大事件,或者在主角被击倒时,从观众席使用此特效,都能给玩家带来更强烈的现场感。Unity中使用Depth of Field Image Effect脚本来实现。

其他特效

还有一种常用的特效,就是对移动目标使用残影。这种特效与运动轨迹不同之处在于拖在身后的不是简单的粒子效果,而是对象前几帧的影像;与运动模糊的区别在于它是单独对某个目标使用,而非整个屏幕。可惜我还没有找到Unity自带实现类似效果的方法,希望有了解的朋友不吝赐教。

Unity——Export/Import Package功能和项目管理的研究

Unity3.0在支持大型游戏项目开发时的两个不足:即对模块化和svn协同缺乏支持。随后,分析了Unity自带的Export/Import Package 功能,并提出了使用此功能与svn配合实现多人项目协同的方法。有关Unity的其他话题也可以查阅我的其他文章

Unity项目协同的挑战

      在使用Unity开发游戏项目时,一般都需要多人同时工作。例如每人负责不同的场景,或者一些人负责调试光照和渲染,另一些负责编写程序逻辑。总之一个人全包的情况对于稍大一点的项目而言少之又少。但遗憾的是Unity对协同项目工作和大型项目的支持可以用糟糕来形容。
      首先,Unity没有模块化开发的概念。我们知道模块化是开发大型项目必须的一种实践方法。例如用VC开发大型程序时,我们可以把程序拆分成多个dll项目来开发,由此减少单个项目的复杂度和编译时间。另一个例子是flash程序的开发,同样可以把工作拆分成多个flash项目,最后将每个项目生成的swf或者swc合在一起工作。
      然而到目前的3.0版本为止,Unity仍然不支持类似dll或者swc/swf这种模块化构建应用程序的方法。对Unity而言,一个游戏就是一个工程。如果游戏规模很大,包含很多资源,那么项目就不可避免地变得臃肿和难以维护。Unity在打开、刷新、编译这类工程时也会耗用更多的时间。以至于在Unity官方论坛上都能看到许多这方面的抱怨。例如这篇帖子http://answers.unity3d.com/questions/19688/splitting-complex-project-into-multiple-projects就详细地描述了一个770M左右大小的项目所面临的困境。
      其次,Unity会将项目信息以二进制格式保存在library目录中,其中被称为元数据(Meta Data)的信息更是记录了构成游戏的许多关键数据(例如模型导入所使用的各项设置、Asset之间的引用关系等)。但由于这些数据是二进制格式,并且存放方式很不清晰,因此在使用SVN等版本管理系统时,无法采取多人修改-合并的方式。只能一个人改完后,提交整个项目,然后下一个人再改。严重阻碍了项目协同。Unity官方提供了一个收费的Asset Server,我没有用过,不知能否解决这个问题。如果我们能通过一些手段让免费的svn发挥作用,何乐而不为呢?
      对于Unity的第一个缺点,我们暂时没有好的办法来解决,只能希望Unity后续的版本能提供模块化的支持。(Unity和ExitGame近期宣布展开合作,推出一款针对MMOG开发的产品组合。Unity将推出一个叫Legion的版本,与ExitGame的Photon配合。我猜测Legion应该对大型游戏项目要支持得更好些吧。)
      至于第二个缺点,我们可以用Unity的输出/导入包(Export/Import Package)功能,配合svn在一定程度上加以解决。

用“输出/导入包(Export/Import Package)”功能实现项目协同

Unity的Export/Import Package功能主要用途是在不同的项目之间实现asset复用。该功能的基本介绍和操作详见官方文档,本文将进一步描述该功能的具体表现,以及如何利用该功能实现多人项目的协作。
导入导出包功能具有下列特性:

  • 在导出时,Unity会记录导出内容在项目中的完整路径,并在导入时重建对应的目录结构。因此我们可以方便地在项目间同步目录。
  • 导出时,Unity会让你选择是否导出被依赖的内容。如果钩选择会自动添加被依赖的内容,并显示在列表中。如下图。
imageimage
不导出依赖
导出依赖
  • 导入时,Unity会判断当前项目中是否存在名称、路径完全相同的文件。若有,则判断修改时间是否一致,若一致就忽略,否则会提示是否覆盖。注意Unity并不管文件的新旧,只是简单地询问用户是否用包中的文件覆盖项目中的同名文件。如下图:
image 

  • 最重要的是,Unity输出包时,还包含了asset对应的元数据。用WinRAR或者其他压缩软件打开Unity导出的.unitypackage文件,就可以看到这些元数据文件,如下图:
image
      正是由于导出的包自动包含了相关元数据信息,弥补了用SVN无法管理这些数据的缺陷,我们就可以将二者配合使用,达到多人在一个项目中协同工作的效果。具体建议如下:
  1. 首先用SVN建立对整个项目文件夹的管理,包括asset和library目录以及下面的文件;
  2. 由负责集成的项目组成员管理并提交该项目更新到svn数据库
  3. 其他协作人员从svn数据库下载最新的项目文件
  4. 协作人员对自己负责的内容进行工作,然后将成果输出。输出时不要钩选依赖
  5. 将输出的unitypackage文件提交给集成人员(通过svn或者其他途径都可以)
  6. 集成人员将新的unitypackage导入项目,然后再提交到svn数据库
      如果对人员分工、规范以及项目目录规划得好的话,采用这种方式完全可以实现多人同时工作,提高项目开发和迭代的效率。

Unity3d之MonoBehaviour的可重写函数

Update
 当MonoBehaviour启用时,其Update在每一帧被调用。
LateUpdate
当Behaviour启用时,其LateUpdate在每一帧被调用。
FixedUpdate
 当MonoBehaviour启用时,其 FixedUpdate 在每一帧被调用。
Awake
 当一个脚本实例被载入时Awake被调用。
Start
Start仅在Update函数第一次被调用前调用。
Reset
重置为默认值。
OnMouseEnter
当鼠标进入到GUIElement(GUI元素)或Collider(碰撞体)中时调用OnMouseEnter。
OnMouseOver
当鼠标悬浮在GUIElement(GUI元素)或Collider(碰撞体)上时调用 OnMouseOver .
OnMouseExit
当鼠标移出GUIElement(GUI元素)或Collider(碰撞体)上时调用OnMouseExit。
OnMouseDown
当鼠标在GUIElement(GUI元素)或Collider(碰撞体)上点击时调用OnMouseDown。
OnMouseUp
 当用户释放鼠标按钮时调用OnMouseUp。
OnMouseUpAsButton
OnMouseUpAsButton只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。
OnMouseDrag
当用户鼠标拖拽GUIElement(GUI元素)或Collider(碰撞体)时调用 OnMouseDrag 。
OnTriggerEnter
当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。
OnTriggerExit
当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。
OnTriggerStay
当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。
OnCollisionEnter
当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionEnter将被调用。
OnCollisionExit
当此collider/rigidbody停止触发另一个rigidbody/collider时,OnCollisionExit将被调用。
OnCollisionStay
当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。
OnControllerColliderHit
在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。
OnJointBreak
当附在同一对象上的关节被断开时调用。
OnParticleCollision
当粒子碰到collider时被调用。
OnBecameVisible
当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。
OnBecameInvisible
当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。
OnLevelWasLoaded
当一个新关卡被载入时此函数被调用。
OnEnable
当对象变为可用或激活状态时此函数被调用。
OnDisable
当对象变为不可用或非激活状态时此函数被调用。
OnDestroy
当MonoBehaviour将被销毁时,这个函数被调用。
OnPreCull
在相机消隐场景之前被调用。
OnPreRender
在相机渲染场景之前被调用。
OnPostRender
在相机完成场景渲染之后被调用。
OnRenderObject
在相机场景渲染完成后被调用。
OnWillRenderObject
如果对象可见每个相机都会调用它。
OnGUI
渲染和处理GUI事件时调用。
OnRenderImage
当完成所有渲染图片后被调用,用来渲染图片后期效果。
OnDrawGizmosSelected
如果你想在物体被选中时绘制gizmos,执行这个函数。
OnDrawGizmos
如果你想绘制可被点选的gizmos,执行这个函数。
OnApplicationPause
当玩家暂停时发送到所有的游戏物体。
OnApplicationFocus
当玩家获得或失去焦点时发送给所有游戏物体。
OnApplicationQuit
在应用退出之前发送给所有的游戏物体。
OnPlayerConnected
当一个新玩家成功连接时在服务器上被调用。
OnServerInitialized
当Network.InitializeServer被调用并完成时,在服务器上调用这个函数。
OnConnectedToServer
当你成功连接到服务器时,在客户端调用。
OnPlayerDisconnected
当一个玩家从服务器上断开时在服务器端调用。
OnDisconnectedFromServer
当失去连接或从服务器端断开时在客户端调用。
OnFailedToConnect
当一个连接因为某些原因失败时在客户端调用。
OnFailedToConnectToMasterServer
当报告事件来自主服务器时在客户端或服务器端调用。
OnMasterServerEvent
当报告事件来自主服务器时在客户端或服务器端调用。
OnNetworkInstantiate
当一个物体使用Network.Instantiate进行网络初始化时调用。
OnSerializeNetworkView
 在一个网络视图脚本中,用于自定义变量同步。