此文就是写给Unity的初学者,还有已经参加了培训的朋友,让大家知其然知其所以然的使用Unity。
文章标题没有用“精通”、“熟练”等词语,而是使用了“驾驭”,就是想传递一种感觉,那种Hold住Unity的感觉,出了任何问题你都能快速知道是什么情况,需要实现什么功能都能立即反应过来典型的实现方式是什么样。直到Unity在你手上真正成为大部分情况下都能随心所欲发挥的工具。
授人以鱼,不如授人以渔,本文中几乎不会涉及具体的技术点,而是介绍大量信息渠道和快速提高的途径。

 

学习资料篇

 

除非非常专项的内容,例如《Unity ShaderLab入门到精通》这样的专项书籍在需要的时候需要购买和看,其他书籍没有必要购买,特别是对于有多年编码经验的朋友,就更不推荐看书籍了。
一般大家手里拿的是什么?手机、Pad,回想一下上次你专心的看完一本书是什么时候?拿着一本厚厚的书一会就觉的很累了。
目前市面上非Unity专项类的书籍,大部分是Unity手册的翻译,再加上一两个例子的讲解。不论书名多么诱人,Unity毕竟不是C++语言,版本迭代非常快,书籍上的内容,几个月就已经有些老了。
或许您会说,我用中文书籍翻着很快,查找实现方式很快。其实不然,因为再快也没键盘+Google快。
Google不是被墙了吗?那么试下www.gugesou.com,类似这样的反代理网站还很多,善用搜索可以找到非常多。
如果您要查询Unity相关问题,那么Google非常专业,一般前一两项为官方手册,然后就是Unity Wiki、Communication、Answers等等专业的信息,也许您在解决问题的过程中还能发现其他宝藏。(可参考文章《你与大牛之间只差Google》)
扯远了,回到我们的学习资料篇。
 
Unity最好的学习资料即为自带的三本手册:用户手册、脚本手册、参考手册。      
  • 用户手册:说明了Unity所有功能,并且在有限的范围内,由浅入深的讲解一些功能需求和来源,也没有发散太广,附带了很多使用注意事项和调试优化建议。建议将Unity用户手册像看小说一样全部过两遍,这样当需要用到各种功能时可以立即想到在哪查询。中文版内容非最新,建议过英文版,如果您觉的英文有些吃力,不要害怕,打开词典,一点一点的啃手册,啃着啃着,就会发现前端编程反反复复就是那些词,不但熟悉了Unity,再遇到别的知识也可以快速学习了。没有熟练计算机英语的决心,文章后边的内容已经不太需要看了。
  • 参考手册:已经在目前的版本中移除,在老版本中为逐个说明Unity组件的手册,目前已经合入用户手册。
  • 脚本手册:Unity脚本的索引文档,详细的说明了各种类和枚举,包括类的各种成员变量和函数,附带具体的代码样例。
              
      另外现在Unity官网的Learn板块,Tutorials中的视频区有大量的快速熟悉内容,非常不错,不但演示了各种功能的使用,并且还从编码设计角度指导大家如何编码。这些内容在以前都没有,用了三年Unity的朋友,在上手Unity时根本没有这么好的资料,现在真的是非常全面和实用了。http://unity3d.com/learn

 

Unity最好的资料库索引:Google
Unity是目前全球几百万开发者使用的工具,正如Unity的名字——统一。几乎任何问题都可以用Google搜索的到,您遇到过的问题,其他人也遇到过。不论是问题还是知识,Google一搜,准确参考。

 

学习参考篇
 
我们有了最直接和最新的参考资料,学习基础知识和速查各种信息是足够了,但是如何专业快速的实现各种功能呢?如果利用手册上的基础知识,然后自己去想和尝试如何实现,那就太慢了。
Unity内容体系的实质,就像它的名字“Unity”一样,统一,全球Unity开发者都是使用的统一的工具,统一的类,所以具有非常多好的实现可参考。
当自己想编码做一个功能时,可以考虑首先去找相同或者类似的实现,因为在Unity环境下进行模块开发,很可能专心开发3天的东西,突然发现已经有了非常成熟的模块,功能更多更强大,而且已经被很多人使用过很久确认是稳定的,直接在其之上做扩展或者修改一下即可使用,甚至直接使用。

 

Asset Store
 

      Unity具有目前所有引擎中最为繁荣的Asset Store,形成了特有的社区生态圈,当我们学习完了Unity的基础知识,就是时候跳进插件的海洋,像海绵一样疯狂的吸收和成长,快速的变成专业的Unity开发者。              
       Asset Store包含了全球开发者在统一的工具下开发的各种工具和完整Demo,对Asset Store的学习可以大大加快了解Unity的应用。
对于开发者来说,Asset Store就是每天开发者需要开的“每日早报”,每天都像看新闻一样,早上点开看看有什么新插件上架,他的功能是什么样,他的原理大概如何。
 

规范Demo
 

Asset Store上有大量的“完整专案”,完整的工程包,但是大部分实现的都不规范,更像是为了实现而实现,买回来一看里边乱七八糟,完全不能应用于整齐划
 
一、高度优化、易调试易扩展的商业性项目。
包括官方Angry Bots、Boost Camp,实现和组织也是比较混乱。
那么对于游戏的Demo阶段,最需参考的就是规范的完整Demo,有一些典型的Demo,非常合适用于熟悉Unity和Unity项目的组织。
 

 
以上是著名的TDTK,塔防工具包,此工具包是一个完整的塔防游戏包,自2012年3月(甚至更早),一直持续更新到现在,经过各种打磨,完整度和优雅程度都非常好。

 

从中可以了解到的内容:
1.多管理器项目结构:虽然这种结构看着有些土,不过的确很实用,特别是团队开发的项目,多管理器让每位成员都很容易理解和使用,很多已运营的著名大作也均是使用了这种结构。
2.Unity工程中资源的组织和放置:在TDTK中,每种资源的命名都很规范,放置也均整齐划一,制作完成的各类炮塔、敌人等prefab也均在合适的位置,便于整体调整。
3. Unity中各种典型功能的实现:当要实现一个功能,我们可能首先构思,然后想到Unity提供什么样的组件,然后去实现,这样就导致了同一个功能,不同的人实现的均有差别,导致看不同同学的实现有些吃力。 TDTK一个完整的塔防游戏,涉及到了很多功能,走动、动画、路径、地形等等,几乎均是用了最通用的方式实现,并且很优雅,团队成员留下大体印象后,更好的在实现功能时保持统一。
4. 一些优化方式:在TDTK中,不单单只是为了做而做,其中应用了不少优化处理,例如敌人和子弹的缓存避免卡顿等处理。
5. Unity工具编写和应用:这款塔防工具包所有的配置,均是通过工具完成,路径配置、炮塔、敌人、子弹、波次等等等,均不用通过修改代码和直接修改配置文件,而是全部提供了配置工具,实现很中规中矩,非常容易学习。
6. 将预设作为配置文件使用:TDTK中某些部分将prefab作为了配置文件使用,例如配置波次等,并不推荐这样。Unity中有各种形式的配置文件,但不推荐用预设做配置文件。
7. UI的使用:TDTK提供了NGUI和UGUI两种UI的实现,可以迅速学习和熟悉。
8. 自动化处理:在使用TDTK配置塔防游戏时,不需要敲任何代码,即可以全部使用菜单和工具完成,例如创建自由路径的场景,它很好的使用UnityEditor脚本实现了自动化过程,这在开发中将会节省很多时间。

 

      以上为主要能够了解的部分,可用于学习,也可直接扣过来使用。吃透TDTK,则相当于在短时间内,多了一款塔防单机游戏的实际项目经验,非常超值。
      类似这样优秀的完整实现还包括UFPS、Dungeon Breaker Starter Kit等等,深入的学习和理解完每一个,都等于立即增加了一款完整单机游戏的经验,可以从中学到很多东西,里边不少代码模块也可以直接在扣到自己的项目中使用。
      对于编写Unity的工具,利用好Asset Store也是非常事半功倍的一件事。

 

编码工具篇

 

编码工具的选择在编码效率上差别非常之大,影响了编码速度,则影响了编码时候的思维。
              
普通Unity开发者使用工具:MonoDevelop
高效Unity开发者使用工具:UnityVS + Resharper

 

MonoDevelop已经具备了日常编码所需的所有功能,自动补全、代码高亮、代码块注释、工程内搜索、查找变量所有引用等等。但是没有看到钻石之前,觉的黄金就是最昂贵的。
UnityVS:目前已经被微软收购,提供免费下载和使用,支持VS2010到VS2012(目前好像已支持2013),使用VS作为Unity的编码工具,支持所有VS功能,包括断点调试Unity。
Resharper:效率的区别就在这,ReSharper是一款著名的VS.NET开发环境插件,无数次获得微软.NET各类奖项,相当于C++程序的VA,但比VA更加强大。
 

 

Resharper
 

      在编码上支持功能非常全面,想得到的和想不到的都有,在写代码、看大工程代码、重构代码等工作中,都可以加速很多,包括但不限于:
快速跳转、工程内搜索、快速打开文件、变量重命名、代码块重构、工程内变量重命名、查找某个类的所有基类、查找某个类的父类、查找所有override的函数、代码Review、可配置编码规范、自动提示代码风险等等。
      详细功能请查看Resharper教程。
 

 

 

 
 
以上是其他开发者对ReSharper的评论。
所以,如果还在使用MonoDevelop或单纯的UnityVS,那么开始学习和熟练Resharper,熟悉之后编码就感觉行云流水、天高任鸟飞。
如果某一天上班,打开VS发现Resharper没法用了,启动不了,就会感觉日子没法过了。
快捷键可配置,但是最初记忆Resharper的功能和快捷键没有快速的办法,只有反复记忆,花连续2到3天,每天看一次手册和记一次快捷键,慢慢用起来。

 

代码规范篇
 
    在有了强大的编码工具之后,接下来要注意的就是代码规范了,编写出漂亮规范的代码,特别是一些编码的小细节,会立即体现出有多专业,不用强记,因为代码规范自然而然。

 

1、在所有同学都使用Resharper之后,将规范配置进Resharper,自动遵循规范,如果什么地方不符合规范,则Resharper会进行提示,每个人更新到这份代码,当看到时,都会觉的很刺眼。
2、最重要的,会对性能影响的规范:
a)  不要使用foreach,foreach会申请内存产生迭代器,申请多之后,则产生GC导致卡顿。
b)  不要使用Linq和Lambda,理由同上。
c)  不要在运行时使用GetComponent,一定在初始化时,将Component获取缓存后,然后再不获取。因为GetComponent效率很低,还带有内存申请,会导致卡顿。
d)  不要直接使用MonoBehaviour的组件成员变量,例如transform、animation等等,直接使用相当于GetComponent,一定缓存再用。

 

以上对性能会产生影响的代码请千万注意不要使用,这样优化可以省劲很多。 特别是类似AI代码中,AI树会很深层次的调用,如果其中出现一个foreach,则会泄露很多内存。在递归代码中使用GetComponent,递归一次,可能会泄露1M以上的内存。
类似这样会对性能造成影响的编码规范小技巧,还有很多很多,由于篇幅原因,在此就不做详细说明了,不过现在您应该掌握了获取所有知识的途径—Google,可以告诉您所有的编码规范。

 

结语
 
       Unity是一套性价比很高的引擎套件,也是一种开发文化和技术社区,学习Unity同样性价比很高,它成就了全球无数开发者,也同样成就了无数公司,类似国内的蓝港在线,因为选型Unity,一跃成为一线开发厂商。
       对于Unity开发,就如同理解它的名称——统一,不断的往巨人肩膀上站,避免重复造任何一个轮子,因为我们的目标是做游戏,做产品,而不是搞科研,在达到效果的情况下发挥Unity最快的开发速度,才真正用好了Unity。
        祝愿大家顺利的成为Unity牛人,然后利用这项技艺,一起实现自己的梦想,或者对生活带来比较大的改善。