笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。
CSDN视频网址:http://edu.csdn.net/lecturer/144
最近公司由于人员变动,需要招聘Unity3D程序员,面试了很多人,学历从专科到研究生,在这些人中有工作两年的,三年的,五年的等等。在面试的过程中,面试者对于Unity基础知识的掌握很不扎实。如果只是为了完成策划需求而无视基本功,到头来会导致自己的基础非常薄弱。就跟雾里看花一样,明面上工作经历非常丰富,实际上这些经历经不起任何推敲。作为Unity开发者来说,对于Unity的一些基本常识还是要清楚的。下面就给那些学习Unity开发的程序介绍一下:
一、Unity作为3D游戏引擎必须要掌握固定流水线和可编程流水线,因为涉及到矩阵变换的知识点,在项目开发中会用得到的,如果读者不懂的可以查阅资料。
二、Unity作为3D引擎有自己的坐标系,在此强调一点,虽然它的图形API分为DirectX和OpenGL,但是它的世界坐标系是左手坐标系。
三、另外要掌握的坐标系有屏幕坐标系,UI坐标系,视口坐标,包括它们的原点是在哪个位置,因为在项目开发中也会涉及到以上三个坐标系之间的变换。
四、函数的执行顺序,比如Awake,OnEnable,Start 等,以及3D碰撞体的执行效率,比如球体,胶囊体,立方体,Mesh等等。
五、程序的优化处理,这个是面试考察的重点,内存的管理也是Unity程序开发的重中之重。内存管理无非就是对内存的使用,针对UI的内存管理使用的是图集方式,Unity自身的图集功能浪费内存,比如2048*2048的图集大小,它占的内存是4M,也就是说不管图集是否填满,它都需要在内存中开辟4M的空间,但是如果使用Texture Packer工具就可以节省没有填满的空间,针对大量UI的加载可以采用分类打包图集的方法处理。当然内存池的使用也是可以应用到UI的管理,另外就是对3D场景资源的管理,需要场景图片有自己的图库,这样图片可以重复利用,另外模型的面数,骨骼数量,材质数量这些都需要去关注。
六、内存优化还需要涉及到图片的格式,不带Alpha通道的图片采用jpg格式,带有Alpha通道的采用png格式,这是一种处理方式,另外一种处理方式就是将Alpha通道单独拿出来,所有的图片都是jpg格式,然后用带有Alpha通道的图片跟jpg格式文件进行结合使用。这样也可以优化图片的大小。
七、在架构设计方面,就要注意了,代码的编写,比如常用的设计模式,工厂模式,单例模式,MVC模式,FSM模式,观察者模式等,这些模式作为开发者必须要掌握的。
八、接下来就是Shader编写了,在这里给读者推荐一个编辑器工具Shader Forge编辑器,对于一些材质渲染非常好用,这个可以作为读者学习Shader的工具。
九、另外对于C#中定义的String,StringBuilder或者List,ArrayList等它们之间的区分要搞清楚。
十、不同机型的适配处理,技术验证等。
十一、热更新技术的实现,市面上应用比较广的是ulua作为脚本语言的框架设计。
十二、作为客户端开发者也需要了解一些网络方面的知识,比如tcp,udp,http这些协议处理的方式。
十四、作为渲染场景的后处理方式,比如Bloom,Blur,HDR,SSAO,PSSM等等。
十五、C#中的事件监听,委托的使用也要熟练掌握。
十六、协程与多线程的区别。
十七、文本文件的加载,比如json,xml,csv,二进制等等。
以上作为Unity开发者必须要掌握的,很多人感觉在公司学不到知识,其实除了完成工作需求外,还需要主动的去学习,这样才会真正的提高自己的技能。希望对读者有所帮助吧。。。。。。。