这些年的折腾
作为一个半路出家的程序员,我绕了很多弯子.
先是学习iOS开发, 做点小应用, 然后不知道怎么的突然想完成儿时的梦想:做一款游戏.
2013年末,看完<被解救的姜戈>之后,我选择做些自己的东西.
作为一个游戏行业的外行人,我在刚开始的技术选型上就没走对路子.其实当时我压根就没有这方面的概念, 当时苹果的WWDC发布了一个SpriteKit的游戏引擎, 我初略评估了一下, 和Cocos2d很像(非Cocos2d-x), 决定用SpriteKit作为我的游戏引擎.
其实也是因为当初太懒了,对学习其他语言有抗拒,当时只会Objective-C, 就放弃了Cocos2d-x和Unity3D(当时这货国内用的人不多,我还以为是一个野路子)
SpriteKit
好吧,最终就是用了一个SpriteKit来开发<别吃我>,其中的幸酸,我去.
项目结束之后,我了解到国内的游戏行业需要找游戏发行商,OK,联系了大概70-80来家大大小小的发型商之后, 大概得出以下几个结论:
- 你的游戏画面不错,但是玩法太过枯燥,游戏评级在C-B之间.
- 我们需要Android版的游戏包, iOS的不方便运营.
- 我们需要Android版的游戏包...
- 我们需要Android版的游戏包...
- 我们需要Android版的游戏包...
omg...
Unity3D
好吧,不就是要一个跨平台版嘛,独立完成这个项目之后,此时的我对开发的理解有了一些变化:
- 在有其他语言基础之后,学习一门语言的时间其实很短
- 程序架构,开发思路,API的使用熟练,这三点决定了开发进度.
- 这类游戏项目最大的开销在于游戏设定和美术(包括动画),程序只占其中的30%.
对比了一下Cocos2d-x和Unity的前景,我选择了Unity.
看起来挺简单嘛,评估了一下1个月学习Unity,2个月重新开发一遍.开干!
(有时候就不能太自信,每次评估都会错...)
死在好奇心
- 来到C#的世界才知道Objective-C为什么被称为一个"古老"的语言
- 用到了一个专业的游戏引擎, 才知道之前SpriteKit是一个什么二货,原来自己之前的工作有40%是在补充SpriteKit未称职作为一个游戏引擎的坑.
- 原来还有这么多实现复杂动画的方式.
- Unity是组件式开发, 完全颠覆之前的开发思路, 有直观的编辑器的确更高效, 也更让人不习惯(我在iOS中可是洁癖得连xib都不愿意用的傻子...)
我决定用新的动画(骨骼动画)代替老动画(逐帧动画), 相当于用CPU换内存,iPhone5s的手机当内存接近400MB时就有被系统干掉的风险,我原先全用的是逐帧动画,在某些个复杂的场景已经隐隐有内存警告了,用骨骼动画一劳永逸,并且可以实现许多复杂的功能, 例如换装系统等等.如果有换装系统,怪物的类型可以多出许多.想想都流口水.
重做动画我选用的是Spine+Unity的原生动画状态机,并且重写Spine用到的Shader以降低CPU计算量;通过暴力测试发现如果安装原先的设定50多个怪物冲下来的话,CPU会飙满,需要重新设计怪物的属性和关卡难度,反正之前设定的关卡也太不好玩了...
花费了1个月学习了Unity和Spine之后,评估了一下工作量,要把角色全部重新绘制,并且使用Spine重做动画,大概需要45天,好累,都是体力活.
..........................
好累, 还是去上班放松一下吧
就是那一天的下午,看着还未Unity重构完的怪物们,和以前同事通了通电话,再看看手头上已经花完了的积蓄,突然有一种非常疲惫的感觉.我安慰自己:"还是去上班放松一下吧,哪怕上两个月再回来也好"
还是做视觉设计师吧,画画图就好,轻松,投简历!
当天凌晨4点多,我往外投了4封简历, 接下来的两天面试了3家公司, 有一家公司不知道什么原因最后没通过.第四天重新开始了上班的生活.
不过人总是贪心的, 我要了一份单纯做设计很难得到的薪酬, 等待我的是一个混合的工作内容, 并且要从组建团队做起, 好像上班也是放松不了...
Android的未来
换个新环境的感觉挺好, 渐渐发现国内的公司真的是起来了, 给他们一个Android, 他们能还你一个世界.
iOS只是某些App的一个平台板块, 如果是一个纯应用开发的公司, iOS或许占了60%的重要性, 但如果像这两家公司的公司形态, iOS只是产品线的小糖果.
或许未来,每一个设备都是Android的系统, 手机是Android, 电视是Android, VR是Android, 汽车是Android, 甚至电冰箱和洗衣机也是Android.
人们需要越来越多的设备更加智能, 而苹果公司的产品线是有限的. 并且封闭的系统并不能满足全球制造业的需求, 现在它们最好(唯一)的选择就是Android.
现在已经不是当年那个:"我们要开发一款应用, 先已iOS版本作为标杆, 然后获取用户, 补充Android版本,运营, 指数增长.", 现在互联网+,就是软件,硬件,商业模式,各种合作, 单单一个手机应用有点势单力薄.
只要涉及到智能硬件, 那就涉及到Android.
而且苹果用户和Android的设备比例已经是1比4.5了,差距还在逐步拉大.
ReactNative如何?
Android是未来, iOS是当下, 我们处于未来与当下之间, ReactNative就是打通它们的桥梁.
不了解就不能评估, 先学再说!
这些日子,花费了不少精力学习ReactNative, javascript和node.js的世界实在太庞大,比想象中的复杂很多.
不过了解之后,其实用ReactNative写一个常规的应用真的很简单:
Fetch读取服务器数据,解析数据,Render界面呈现数据,修改State动态修改界面内容,Flex排布UI,Action进行页面交互.
最终,得出一个判断:
ReactNative大有可为,不过必然终将死去.
- 它只是一个过程, 在未来的局势还未到来之前,它的确是一个很好的方案.
- 它的开发方式很难被客户端和iOS,Android开发人员接受,前段人员会非常喜欢它.
- 复杂功能的程序它无法独立完成,需要native做配合.
- 可以预计未来iOS和pc端必然会逐渐减少, 跨平台的意义也会逐步被削弱.
- 专注纯粹的界面层(Redux只是让我们更有条理的控制界面层), 风险太高, 难保你的工作会被一些工具+设计师直接取代.现在大有这个趋势.
- 未来的应用如果还只是读取服务器数据,解析数据,界面呈现数据,排布UI,页面交互.那样的门槛会越来越低,而ReactNative做的就是这类事情, 作为个人技术选择的话价值会越来越低.
- 虚拟视图层是一个很好的点子,不过可预计的会有类似的框架出来和ReactNative竞争,选择它就决定了未来的日子会消耗在不停的选择新框架上.
So, 我看好它, 但是长远的看, 我觉得不该太过深入的学它.
结论:安安心心补安卓
由界面层入手, 逐步了解安卓的机制, 慢慢往底层靠拢, 或许这个是一个很好的选择.