09 December 2015
版权声明:本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名elloop(包含链接)

前言

作为一名cocos2d-x开发者,开发2D游戏已经有两年多了,这两年来目睹了手游市场的浮躁, cocos引擎的出现降低了手游开发的门槛,提高了手游生产效率,这两年着实是火的不行。然而,手游发展速度神速,眨眼间3D手游几乎以铺天盖地之势袭来。cocos的一个“劲敌”unity卷土而来,几乎霸占了整个3D市场,很多开发者都欣然奔向了unity的怀抱。cocos2d-x也从3.3版本之后开始猛加3D功能,如今3D功能也是比较完善了,市场上也出现了cocos3D开发的产品。身为一个cocos2d开发者的我该如何选择?

从市场需求来看

前两天还跟一个前同事聊天,他之前是做cocos的,前两个月出去找工作,他说cocos的职位已经不太好找了,大部分公司都在招unity,开始搞3D了。

如果真要看市场情况,更直接的办法就是到招聘网站上对比一下cocos和unity两种职位的搜索结果。从我的比较看来,结果可以说是挺明显的,在市场需求上面来看,unity已经超出cocos很多了, 以后这种优势可能还会越来越明显。这意味着如果你要想更容易找到“好职位”,学习unity是个不错的选择。unity有更加成熟和完善的3D功能,也比较容易使用。

从开发语言上考虑(肤浅 -_-!! )

我喜欢用c++写代码,虽然水平没多高,但是因为在它身上花费了很多心血,也用的最多,所以我想在我的技术生涯有更多的时间继续使用它。虽然通常来说纠结于语言是菜鸟程序员才会有的2B行为,但是为了c++,我愿意做这种2B。

如果你像我一样偏执,纠结于语言,并且也喜欢c++,那么从cocos和unity上选择结果就很明显了, 肯定是cocos啦,它的源码都是c++,开发也可以用c++,尽管现在脚本绑定已经很成熟开发效率也更高, 你喜欢,你任性, 你时间多,那你也可以和我一样,就用c++开发。unity开发游戏,据同事所说,他们在用c#,也能用js,也能用lua,也能用c++开发自定义插件,但是c++只是辅助,虽然unity的源码应该是c++,但我又拿不到,所以从语言层面,我要投cocos一票。

从学习角度来看

如果你像我一样,也是搞了很长时间的cocos开发,那么开始转向3D开发,我觉得学习3D图形学的知识,并结合cocos3D来实践和研习是很不错的。因为你已经很熟悉cocos引擎,并且能看到它的全部源代码,使用它来学习3D引擎和3D开发,你能了解到“轮子是怎样造成的”,深入进去你甚至也可以学会造出“3D引擎”这样的轮子。当你精通了cocos这个轮子(从2D到3D, 掌握OpenGL ES, shader), 我觉得学习或者使用别的3D引擎也不是什么大问题, 你在这条路上也会也走越好,就像王哲大大在知乎上的回答:

问题

我是做cocos2dx游戏开发的,想转ios开发,想听听大家的看法?</br> 我做cocos2dxi开发有一年多,但是本身觉得游戏开发的成长空间不大,技术更新快,感觉自身可能应付i不大来,想成为高级程序员还是比较困难,而对于ios,觉得对比游戏c++和lua,ios还是比较纯粹吧,在加上之前开发游戏都是用的mac和xcode,xcode算是比较熟练吧,对于ios,oc也有些了解,有开发过一些小应用,算是入门了。 不过转到ios的话,就意味着我要放弃游戏一年的经验,可能工资会较低吧,而且不知道能不能找到接纳我的工作~,不知和道大家怎么看,是继续游戏开发呢?还是趁现在在找工作之际转到ios 呢?

王哲大大的回答

我建议是一专多能。技术上的一专,是把某个技术吃透称为真正的专家,比如cocos, unity, unreal精通任一引擎,或者游戏服务端。多能,就是各方便都掌握一些,自己业余时间学过、练过手,具备一定的技术视野。比如我除了手机游戏之外,自己写过一个开源的媒体播放器(C++),一个开源的任务管理系统(PHP),智能设备的硬件驱动(C++)也写过一些,用webkit写个桌面应用也没问题(JavaScript),Qt和QML玩过,python写脚本来处理重复工作也OK,没事情就看看其他有意思的开源库,写个小demo看看人家的开源库怎么玩的。新出的Swift, GamePlayKit, Apple Watch也写些简单的app玩两把。把技术当做一项爱好,而不只是谋生手段,会快乐许多。

原始链接

一专多能,这个总结我觉得太棒了,学技术就该这样,得有一个方向是你特别擅长的,研究的比较深入的,让这个方向成为你的核心竞争力。如果做一棵墙头草,随市场的风向标频繁的改变自己的学习方向,可能哪个方向上你都浮在表面,这个方向上的后来者可以很轻松的把你超过,更惨一点的是如果这个后来者在自己的方向上搞的特别深,我觉得他换到这个方向上,进步的速度也是你比不上的,因为技术大多是相同的嘛,尤其是同一个领域内的知识。你真正精通了cocos3D, 害怕学不会unity吗,还会怕找不到好的职位吗?

我对unity了解的还不是很多,公司有几个MMO的项目已经在用它开发,我所知道的就是它很强大、很美!听同事说,它上手很容易比cocos2d开发还要简单。我在unity的官网上也看到了它有比较完善的技术文档、教程以及社区支持,加上现在国内外火爆的使用占有率,看起来是不用怕在网上搜索不到问题的解决方案了。然而我更加关心的是它开不开源,去unity官网几次,可以看到它有免费版和pro收费版两个版本,在两者功能对比列表里可以看到访问源代码这个功能,两个版本都不支持,就是说你买了pro版本的也不会看到源码,如果要看源码,上面有提示“请联系销售人员”.

unity_compare

看来想从源码角度来学习unity恐怕是需要费一番心思和银子的,一般人是搞不定,首先是从自己技术水平上上考虑,其次是经济因素上。

综合来看,我觉得对于一个初级的游戏开发者,像我这样,才搞了两年cocos,那么选择开源的cocos引擎来继续学习2D/3D开发和引擎的知识是更合适的。cocos源码的水平肯定是在我之上的,也够我折腾很长一段时间了。

而对于unity,它是好多国外大牛的作品, 代码质量不用说,肯定棒到不行,从它的价格上就可见一斑。我这个水平看它的源码肯定会很吃力,现在好好学习cocos,把它搞精,我觉得才是明智之举。路漫漫,以后自己水平上去了,再去研究更复杂的东西,unity或是已经开源了的unreal或是其他。

结论

我的感觉,学cocos就好像“授之以渔”, 学unity就好像“授之以鱼”,对于我现在的技术水平,学unity也只能停留在用它的层面上。现在对cocos2d-x、OpenGL和shader等图形学的东西有了一定的了解,正是时候巩固基础,加深理解的时候,如果匆匆的转到u3d上,做一些看起来炫酷的游戏,而又不知所以然,我想我是不会开心的。虽然我不一定能造的出轮子,但我想了解轮子的构造,我想学会造轮子的能力。

因此总结就是:学cocos是为了学cocos,学unity是为了用unity! 我会继续学习cocos. cocos作为“一专”,要从熟练应用到可以清晰的描述出它的结构和原理,再到可以读懂它所有的关键代码可以做些贡献,最后到可以自己做个mini-cocos; unity可以暂时放在“多能”里面来培养,偶尔用它搞一些游戏玩玩,先做到会用.</font>

现在项目不想以前那么忙了,终于有时间总结一下学习的东西。因为基础的重要性,所以在学习cocos3D知识之前,我得先总结一下两年来对cocos2d-x的2D开发的理解,结合一些小代码例子巩固一下cocos2d-x的基础知识。cocos3D的学习会在2D基础过后的文章中记录下来。


欢迎访问CSDN博客,与本站同步更新



分享到