游戏开发的个人经历和一些经验
这是在博客园的第一篇随笔,审核速度相当快,索性写一篇记录一下吧。
作为一名Unity3d的工程师,入行一年有余,在第二家公司也待了两个多月。入行以来,对软件开发行业,尤其是游戏行业有了不一样的认识,写点东西给刚入职和想要入职的萌新们以及将来的自己。
科班出身的我刚毕业时,并不打算安心做个程序员,可能是黑程序员的段子太多,在朋友一句“干嘛不去游戏公司”的启发下,就进了一家中等规模的游戏公司,虽然工资不高,也就5k,但直到现在,我还是很感谢这家公司,至于原因,后面再说。当然,萌新们也别太灰心,这个工资算是业界较低的水准,就算是同一集团下的另一家工资水平,也比这家高出2k左右,主要之前吃过给新人高薪的亏,所以刚进来无论学校如何,都是按统一标准给的,地理位置是南京,也不算是高工资水平的城市。这一年接手过三个游戏项目,当然,都是很成熟的框架,主要是做UI、换皮、修Bug、做新活动,所以作为新人,要有这样的心理准备,尤其在当下粗暴发展的手游行业,想做一个引擎的研发,可能整个职业生涯都很遇到几次,当然,这也是我入行半年,有些急躁的地方,一方面做着有些低级的工作,一方面对自己的构建能力十分盲目自信。
就我其他同学的工作来看,游戏开发已经比同期的其他软件开发复杂许多,对于一些小型软件公司来说,有一套不知从哪里来的祖传源码,你所要做的只是去给客户安装调试或者针对客户的需求做些小的修改,对于大型公司来说,新人有更充沛的时间和资源去学习,并且总有一帮技术大佬坐在哪里给你信心。而对于中小型的游戏公司来说,一个团队就这么十几个人,每个人的关注点都不大一样,即使是技术大佬,也有不少技术盲点,你所能依靠的只有网络和自己。好在游戏开发并不算那么严谨的软件,真的遇到一些技术障碍,只要不影响运行,删几个需求也不是不可能,当然这种情况还是不要发生为何,这会有损自己和公司的形象。
后半年主要做移动平台相关的支持,也就是SDK对接和安卓苹果原生功能的开发,当然都是Unity游戏开发相关的,这半年几乎没有在10点前下过班。作为开发的最后一环,所有的Bug都会先到我这里,理论上不是由我负责的部分,因为找不到当初负责这部分的人,所以只能去帮着修改,另外海外公司的对接文档,也是非常糟糕的,后来我会直接去把对方公司的技术拉进一个小群里讨论,有时候运营同学夹在中间,真的有些碍事,所以直接和技术讨论,是最有效的快速解决问题的办法,而不是拖个好几天,才得到一个不准确的反馈。
最后也带了两个新人,当然,我不是一个脾气好懂得如何教别人的人,说实话,新人真的很糟糕,所以这也是我感谢给我第一份工作的东家的原因,因为把一个刚毕业没有经验的学生培养成能独立完成工作的同事,是一件劳心劳力费时的苦差事,比遇到技术问题还煎熬。游戏开发,速度意味着更多的市场和更多的钱,当然这不绝对,但第一个公司的策略就是如此,上线赚到钱再说,赚不到就马上投入一个新的项目,总会有几个项目赚够本钱。因而,每天的工作量是很大的,当然,不要想着是那种弹尽竭虑的工作状态,大多数工作都是不想干的琐事,比如,这个图集丢失,这段文字再往上挪点,这个按钮响应区域有点小,这往往都是一些小疏忽或者在程序眼中无关游戏流量的小事情,但这就是游戏行业的日常。
虽然离职前给了丰厚的待遇,但我还是选择回家休息一段时间,作为终身事业,我想我不能失去对游戏制作的热情,所以打算自己开发点什么或者只是单纯的休息。一年的开发工作,让我知道书本的例子和工业化的标准间的差距,我的编程水平、工具应用能力、编程的意识有了很大的进步,但是我却不知道该写点什么,于是一边休息,一边学习,一边开发一些觉得以后能用上的工具。我终于意识到,我不仅需要学习开发,还要学习设计,仅仅开发他人的需求,很难得到快乐。就如同离职前我回答领导的,假如兴趣和工作能结合在一起,即使不存在,我也想先找找看。
很遗憾,新的公司尽管是一家创业公司,还是没能有我需要的那股热情,但是作为一个成年人,必须考虑生活成本和工作职责。游戏内容没有让我获得成就感,我们依然可以在技术中找到乐趣,任何积累都不是无意义的,当然,我也开始学习游戏设计,希望有一天我的职称不再是一个工程师,而是一个游戏设计开发工程师。以上就是我大致的入行经历,希望能给萌新们一点参考,另外,现在的薪资也有1w4k,一年的时间增长了将近三倍,地点是在上海,所以只要付出一点点努力,对技术有一点点强迫症,在游戏行业还是有发展空间的。个人经历不能完全代表整个行业,仅仅作为参考。
之前在其他论坛也零零散散地写过一些技术贴,大多为工作中的一些难点和网上没有完整正确的答案的相关技术流程,因为最近在学习游戏原型开发,所以会有相关的文章,可能技术方面会比较简单,但是独立开发游戏真的没有想的那么容易,至少目前还没做一款好游戏的方法论,我会写一些设计方面的心得和开发上的难点。如果有时间,我也会把我最近在开发的,也是公司需要用的移动平台原生的工具箱放上来,这方面我也不是专家,但在Unity游戏开发团队中,起码能派上用场,但是我会确保能适配各版本的移动端,同时在优化框架等方面做到尽可能的完美,当然,整个规模很小,只是一些小的注意点。
另外,两个月前我认识了一个让我心动的女孩,她小我6岁,今年正好18,各位不要喷我,萝莉控而已,一个月前开始约会,每天都能见面,几乎每周双休都在一起,我也把时间更多的倾斜到生活中,希望能一直走下去。我觉得自己很幸福,与同行业的同学相比,方向是喜欢的游戏开发,技术能力也比其他方向的高出很多,而且也没有苦行僧式的程序员生活模式,有个美丽可爱的小萝莉陪着我。
—————————————————————————————————————–咳咳咳,这是个技术博客——————————————————————————————–
扯了这么多,最后来点干货,不是具体的技术知识,算是心得吧,依旧是Unity游戏开发相关,一些注意点和易坑点,以后有机会会拓展写写,供新手们参考参考。
1.Unity是一个非常活跃的公司,在入门书籍之后,你应该多去关注他们官网的指导和API,以及他们的官方微博和演讲视频。因为这些都是准确的第一手资料,比论坛里复制几个好几年的旧货管用(有些甚至是错误的)。
2.你的同事以及领导可能就是你在论坛里崇拜的大佬,虽然可能在某些领域,他们并不精通,但假如他能诚恳的告诉你,这方面他也不大了解,那他一定有你可以学习的地方,好过那些总是用大嗓门去掩饰自己无知的自负鬼。(比如“这种东西还需要我去教你嘛”,然后抛出一堆术语之类,当然,并不排除偶尔心情不好的时候)
3.游戏客户端要尽量避开多线程开发,一是不好管理容易错,二是Unity不鼓励,当然,这并不绝对,总之不要想着这能提高cpu利用率,就随意地开一个线程。
4.尽量用Unity提供的现成方法去完成需求,也许你能提出无数个理由的替代方法,但是这是我的信仰(编程方法绝对是信仰),另外你也无法反驳,没有哪个团队比Unity更懂Untiy。另外,在你打算撸起袖子造轮子之前,不妨多参考参考别人的方案,或许有现成的,你不一定要复制粘贴,但是把一个东西改得更好,会比闭门造成容易得多,也好得多。
5.不要迷信模式,比如游戏常见的单例、工厂,还有常见的方法,比如心跳、同步等,这些方案都不是固定教条,如果你选择某种模式后发现写起来不爽或不便,说明它不是你需要的正确模式,不如按自己的想法去写。(我就遇到过迷信心跳模式,并质问我懂不懂什么叫心跳的同事,对于这种人呵呵就好,因为你无法和一个迷信的人探讨真理)
6.保持学习,哪怕是你觉得可能用不上的,我就从未感觉到学什么是无用的,觉得无用只是你还不会活用而已。
7.不要怀疑你的开发工具和编译器,出问题的只可能是你自己的代码,基本所有情况都是如此,当然,如果是不稳定的环境,也有可能是工具错或者你还没有完全学会这个新版本,去官网查一查就清楚了。
8.Android Studio更新Gradle几乎是不能的,除非你FQ,不过最近墙有点高,所以可以在国内网上找到gradle,然后在将Unity导出的Android工程导入到Android Studio之前,把原本的gradle版本号改成你自己安装的。
9.Android Studio最新的SDK tools是无法应用于Unity的,下载一个老版本的tools,然后放在对应的文件夹下,并且忽略掉更新。
10.Android工程奔溃常常是因为线程问题,在不肯定的情况下,将Unity调用Android的方法放到主线程,更为保险。
11.Xcode工程很少出现线程相关问题,如果有,你也很难解决,不如好好检查一下你的编译配置。
12.有些编译器的信息并不准确,比如LuaStudio,会将未引用的对象的空间位置写成其他table的位置,Xcode会将未开放源码的对象结构表示为空。但是log出来的信息是准确正确的。
13.假如多个方法都能站得住脚,没有明显的优略之分,他们的矛盾可能体现在空间和时间的占用区别上,根据优先级去做取舍。往往你做的越多,电脑需要做的越少,反之亦然,这都符合能量守恒原理,没有最佳的方案,只有合适的。
14.仔细查看控制台的输出,哪怕大多数你不能理解甚至看不懂,但是你要清楚,这里面藏着你出问题的原因,甚至还有现成的解决方法。
15.不要有一点思路就在几百万行的代码工程里做修改(在大部分游戏公司,你能拿到前端或者后端的整个工程代码),可以先做个小场景去测试你的代码,确保大部分情况下不会出错,再想想怎么能耦合度最低地加入到代码中,并在需要或者你不能肯定地方留下注释。
16.别因为工作而让你失去激情,失去生活,假如你感觉很疲惫,不如休个假调整一下。