查看原文
其他

非科班,野路子,他如何“弯道漂移”进天美

腾讯技术 2022-06-08

The following article is from TiMi Club 天美俱乐部 Author 腾讯天美工作室群

本文作者:阿升,腾讯天美工作室工程师

写在前面

没有科班经验,走过许多人生弯路,直到二十多岁的年纪决定重新开始,自学游戏开发技术,通过社招进入天美 —— 这是我们身边同事阿升的故事。

来到天美前,阿升因为喜欢《QQ飞车》,用了一年多时间,尝试独立开发一个移动版本,遇到种种困难,用了“最土的方法”去克服。后来在人生的低谷期,他写了一篇回顾性的博客,却因此被项目组发掘,得到了一次应聘机会。有人说他是自己见过“路子最野”的程序员,面对弯路,他的态度或许像企微签名“疯狂漂移中...”一样,最终也殊途同归
阿升的企业微信签名如今,阿升加入了天美 J1 工作室,为热衷的《QQ飞车手游》等项目提供技术支持,已有 6 年的司龄,也多次获得了优秀员工奖项。经本人同意,我们转载了他撰写的博文,故事中有他犯过的错误,遇到的贵人,与努力的改正,希望对大家有所帮助。【原文较长,内容为可读性略有调整】
阿升近照故事的开始
我在安徽出生,但在贵阳长大,因为个人原因,没有读过很多书,倒不是家里条件完全不允许,父母被气个半死拿我没辙。
现在想起来,还是挺后悔的,多读书能少走很多弯路,只是那会儿不懂这个道理无所事事了一段时间,跟家里关系也闹得很僵,后来大吵了一架,索性一个人跑去青岛找网友(男的,幸好不是坏人,好孩子也千万不要学)。身上只有几百块,憋着一口气不想回去啃老,也不想被亲戚看不起,就做各种零工赚钱。最难的时候几天吃不起饭,一桶水都喝光了,起床的力气都没有。床头柜上还有一星期前吃剩的馄饨汤,里面还有几片馄饨皮,闻了一下都有味道了。一咬牙,一口闷,这酸爽,够味!撑到朋友接济才挺了过来。初涉编程,膨胀遇挫我平时喜欢玩游戏,特别崇拜做游戏的人,感觉他们很牛,能把那么多好看的画面放到屏幕上,你还能控制它们。当时我认识一个游戏金团的人,在他的介绍下给他们打工刷装备,第一次知道了这些灰色产业。团里有人在用插件,是一种辅助工具,我什么都不懂,但背后的原理让我感到很好奇,觉得跟做游戏很像,电脑技术都很厉害!我动了学编程的念头,以前好像怎么都读不进书,但可能兴趣是最好的老师,忽然就开窍了。我泡在各种贴吧论坛,在网上一个词一个词地查,学了点散装的编程知识,试着自己上手改良和开发,只会用最笨最初级的办法,较劲一定要弄出来,折腾久了居然稍微懂了金团效率高了,给我多发了点钱。中间我回了趟家,给我妈买了一只口红,给我爸买了一条中华,他们都很高兴,不是因为买了东西,而是因为儿子回来了。我觉得自己能挣钱了,变膨胀了,花钱大手大脚,还交友不慎。灰产终究是灰产,每个人都很急功近利,因为谁也不知道下一秒就会发生什么。一连串的变故很快发生,金团倒了,钱也没了,跟曾经信任的“朋友”打了一架,彻底撕破脸。现在回过头看,其实也是好事,让我从歧途中走了出来,而不是继续错下去。但在那一年,似乎我拥有的一切都消失了 ...... 我又陷入了一事无成的迷茫。舞房的朋友接纳了我,让我住在舞房,跟他们吃住一起,有小课叫我代代课,一节课下来给我一百来块钱。那阵子浑浑噩噩的,没课的时候就把头闷被窝里睡一天,电脑也不会去打开,晚上没事就跟朋友去酒吧喝酒。一个月下来,我在苏州的朋友过来玩,看见我说感觉我变了一个人,都不敢认我,外观也变化太大。很邋遢,面色蜡黄,胡子拉碴的,头发没有洗,乱七八糟的。过年回了趟家,不知道为什么,过完年我又回来了,继续住在舞房,继续堕落。潜意识是在躲避着什么,一直走不出来。重新出发,野路学习这时,朋友介绍我去大学教大学生跳舞,认识了一群不错的小伙子,练舞肯吃苦,想法也没有社会上的人那么复杂。我开始喜欢和他们混在一起,其实我年龄跟他们一样大,有些人比我还大。喜欢跟他们在一起我想不是因为年龄的原因,是因为他们阳光,热情。我长得显老,他们以为我比他们大,都叫我升哥。跟他们在一起半年,我走出来了,看开了,之前的事都过去了,在新的一年,我会重新来过我终于又重新打开电脑了。我把以前的一切都删了。嫌麻烦,干脆直接重新装个系统,全盘格式化。我想做游戏,我的初心是做游戏啊!为什么我现在才醒悟过来,真是当局者迷。我以前有个很要好的朋友,后来当.NET 程序员了。听他说投 BAT 简历直接被扔了!原因是要么学历不够,要么不需要.NET 程序员。这小子不知道哪儿来的自信,其实我猜测他被拒的原因是这最致命的三点:看脸!看脸!看脸!我下定决定要学习做游戏了,找到他的 QQ。我:我想做游戏,我应该从哪方面入手?他:C#、Unity。我那.NET 程序员朋友在下文中我就用 RRQ 表示他的名字。上面提到我猜测他面试失败的原因,他表示十分不服气。(那好,咱们就不提脸的事!咱们聊聊体重!哈哈哈~)我们的相处风格就是这样,见面就是互损,即使很长时间不联系也不陌生。看到被黑了,他顶多会立马 QQ 上"威胁"我,让我给他发红包,不然这事跟我没完。RRQ 就是这样人,人特别好,很有大神风范!每当我们谁写出几句酷炫代码或者酷炫功能的时候,我们就会找到对方,问对方这个牛不牛,能打多少分。我学习C# 他没少帮助我!他是我的好基友,也是引导我走向正路的师傅。就像我快饿死的时候接济我的人一样,我把他也当成我的贵人。当务之急就是学习游戏编程。我下载了最新版本的 VS 和 Unity,还不急着直接学 Unity,从头再老老实实学一遍 C#(说是老老实实学一遍,其实我也只是大概看了下 - -)。看着满屏幕的英文就头大!天啊,我英文那么差,这让我如何是好?英文差没法写代码吗?肯定不是啊,后来我才发现,只要会了基本语法,其他都小意思取个变量名或方法名的时候,写拼音也太挫了,不够逼格!去网上翻译一下,再 copy 过来用。每次取名字就得在网页里面翻译,好麻烦,我干脆调用网页翻译 API 写了一个小翻译器。看别人代码的时候,几乎都是骆驼命名法,直接复制过来翻译器无法识别进行翻译,所以我还加了一个小功能,自动分割大写字母,这样的话,只要英文没有缩写,几乎都是可以成功翻译的,大大提高了翻译效率。我也是没办法,做了这么个翻译器,笨人得给自己想出补自己缺陷的方法来,不然真的就会一直笨下去了。网上说直接学 Unity,可以一边做一边学,我也感觉自己 C# 应该算是入门了,那就直接上 Unity 吧。在自学网站找到了一个教 Unity 的视频,但是上了几节课以后发现老师的代码跟上节课的代码不一样,这尼玛太坑了。继续往下看,发现老师他自己似乎都不怎么会 Unity,代码写错了都不知道哪儿错了,然后直接跳到下一节课!!干脆不看视频了,按照自己的想法来,想做什么游戏,需要哪些功能,怎么实现,全部都去网上查,需要什么查什么。当时有个小游戏很火:《钢琴块儿》。看起来好像挺简单的,那就试着自己做一个吧!我的一个钢琴块就是一个 cube,排了几百个 cube,看着好恶心,有时候想改变其中一个 cube 的坐标,其它块也得重新改一遍。我得用代码去自动生成这些钢琴块才行!研究了一个星期,我把 cube 做成预制件,for 循环随机生成了指定的黑块和白块,完美!就是这效果!按捺不住兴奋,恨不得马上给 RRQ 玩到我的第一个简陋的游戏。但是我又犯难了,不会发布成 apk。继续百度,发现好麻烦,要装 sdk,下载下来以后,Unity 又提示版本不对啥的,换了一个,打包中途又报错。继续换版本,来来回回折腾了一个通宵,终于打出了属于我自己的第一个 apk 包,别提多激动了!插上数据线连上手机安装了 apk,看着在手机屏幕上出现 Unity logo 的时候,我激动得发抖,我也可以做游戏了!探索飞车,困难重重做出来了第一个简陋的游戏,我并没有想着去完善它。我特别喜欢玩《QQ飞车》,从 08 年就开始就一直在玩。当时 iPhone 上有个韩文的单机版跑跑卡丁车,特别有 PC 端的感觉。但是我又那么喜欢玩《QQ飞车》,看着《QQ飞车》说自己同时在线几百万人,也出来那么多年了,就是没有出手机版。官方不做,我自己做!我想自己做一个《手机版QQ飞车》,让和我一样期待飞车手机版的小伙伴们都能玩到这款游戏。我把想法告诉了 RRQ,他很支持我,跟我说在做的过程中遇到问题解决问题,等你做出来了,你会发现你会很多东西了。他不会 Unity,我想他 C# 那么厉害,C# 这样学肯定没问题,Unity 这样学应该也行,那就开干。想做《QQ飞车》,那得有《QQ飞车》的人物模型、赛车模型、地图模型、贴图、动画,如果要做界面,还需要得到 UI 资源。当然,如果能得到代码更好,就算看不懂,注释还可以参考一下嘛。《QQ飞车》早在 08 年~10 年这两年的所有版本安装包,有个漏洞。使用游戏升级补丁,新建 res、data 两个空文件夹,再把 res.vfs、data.vfs 和几个配置文件复制到空文件夹同目录下。改一下配置文件中的版本号,选择这两个文件夹所在的父目录进行补丁安装,vfs 数据包就会完完整整地释放到新建的两个空文件夹中。当时释放出来后可以直接看到 lua 代码,现在 lua 释放出来都转换成机器码了,只有小部分能反编译回来,没多大用处。我虽然释放出所有资源了,但是我无法使用资源,仅仅能看到 lua 的代码注释 ......还是那句老话,既然游戏自己都能用,那说明还是有方法让我自己也能使用的,只是我不知道而已。我又花费了三个月时间研究如何让我自己能使用这些模型。nif 是模型文件,那我用 3DMAX 应该就可以打开吧,那玩意不是专门做模型的嘛。下载安装完成又发现无法识别 nif 文件!懵了。网上搜了一下,原来有现成的工具打开这种格式,支持预览和导出 obj。导出 obj 我拿来干啥,我还需要动作啊!这下不好找了,网上都翻烂了就是没有,然后去谷歌搜。找了好久看到曙光了,有个 nif  3DMax2012 插件,有点小激动,安装完成后再次导入 nif,成功了居然。
但是模型还是没有动作呀!!动作去哪儿了!!我看到 nif 同级目录下有很多 kf 文件,看命名挺像动画文件的。小手一抖,把 kf 文件拖到 3DMax 界面里,哎哟喂,人物会动了。导出成 fbx,拖到 Unity 里面等着看效果。尼玛,怎么不会动呢?在 3DMax 里面还好好的。我以为是我导出有问题,又重新导了一遍,还是老样子。那是不是 Unity 要设置什么呢?查了一下,还真是。按照教程操作了一遍,欧耶,我的人物在 Unity 里面动起来了。动是动起来了,但是这人物怎么感觉像是抽风了一样,一点不自然,在 3DMax 里面也不自然。加了一个 3DMax 的群询问大神们,得到的回复是有可能编辑器不一样,导致动画丢帧。看样子只能自己调了!我又去找教程学习如果调 3DMax 动画 ......三个月时间就研究这些东西了。我一直觉得笨鸟就要多飞,不要怕失败,我会想“先试一百次再说,不行就算了”。往往你会发现其实不需要那么久,就已经能摸索出一些经验。拿了两张地图《老街管道》《休闲区城镇》、一辆赛车雷诺、一个男孩带动画的模型。我先做的休闲区,第一步目标是人物可以在休闲区里面移动就行了。网上看别人代码怎么写的,参考后用 CharacterController 完成了控制人物移动。目前是键盘控制人物移动,手机哪有键盘啊!官方《QQ飞车》可以用鼠标点击地面移动人物,那我也可以点击地面移动人物啊。又研究到了寻路,发现 Unity 自带了寻路:Navigation。查了资料发现使用起来非常简单,很快我就做出来了。我点击地面,人物就自动移动到我点击的位置。现在又得加一个点击座位,人物会自动跑过去坐着。这和点击寻路其实有些冲突,在手机上操作很不方便,屏幕太小,本来你是要走过去就行了,不小心碰到椅子就坐上去了。于是我把点击地面寻路改成了摇杆控制移动,又学习到了一款插件:EasyTouch。哦了😯,休闲区就算大功告成了!这第一步我没日没夜的做了一个月才做满意,不感觉累。
2014年11月,在改成摇杆控制移动时,也尝试了一下用 NavMeshAgent 寻路画线的效果 图源:阿升
第一步做完了,可是一点游戏的样子没有,我得做游戏界面,这样子看起来有逼格些。界面素材的文件后缀名是.gsa,这种格式我关注了一年多,但一直没有解开。得不到界面素材,我就去游戏里面截图,然后自己 PS。游戏中控件和控件的层级关系很复杂,我压根就没法正常截图!我试着做了一个叫 SuperGUI 的工具,可以通过内存随意操作游戏中的 UI 大小、位置、显示或隐藏。我稍微修改了一下 SuperGUI 的代码,把我想截图的 UI 移动到白色底板的区域,然后再截图,完美!自己其实不会 PS,修图什么的又得学 ......界面素材已搞定,现在就差怎么用到 Unity 里,于是我又学会了使用一款 Unity 插件:NGUI。我这人有强迫症,一定要尽量把UI都布局得很好看很合理。花费一个星期左右的时间完成了登录界面、主界面、休闲区界面。那时候还不知道 xml 和 json 这种东西,我想做背包,物品描述信息这些东西我要存起来才行,如果都写在代码里面那太蛋疼了。于是我又学会了使用一款小巧的数据库:SQLite。我把物品信息数据全部存到了数据库里,感觉清爽多了。做背包需要物品 icon,咋办!我想到了用 SuperGUI 去截图,但是有很多绝版赛车商城里面没有,我也就没法截图。我发现《QQ飞车》每个星期都会更新任务,每次更新的时候本地游戏文件夹中有几个在资源包外的未加密 lua 文件会变化,于是我就打开这些 lua 研究。原来他把任务描述信息写到了 lua 里面,还有任务图标的本地资源路径呢。那我如果改了这个任务图标的资源路径,是不是任务图标就会变成我指定路径的图标?试了一下,果然行得通!但是每改一下必须重新登录游戏才能生效。我写了一个自动修改任务描述 lua 里的资源路径工具,并且修改完成后自动登录游戏,自动截取资源图标保存到指定文件夹中。就这样不停的登录退出,我笔记本挂机挂了三天三夜,没停过。我得到了三万多个物品图标。现在想想我真是个疯子,这么 low 的方法都能想得出来!不过应了我微信的个性签名:“有时最土的方法是最有效的”。如果我当时我不那样去做,我就没法得到我想要的图标。整整三万个图标,我需要逐个在 PS 中裁剪、休整。太麻烦了,还好 PS 有个记录操作的功能,全自动完成了休整三万个图标这艰巨的任务。图标有了,准备做背包,可是又犯难了!我切换的装备下次我进入游戏应该还在才对,我服务器都没有,怎么记录?对!我要写个服务器才行。自己不懂真正服务器,只能找人求救。C# 服务器 RRQ 教我弄了 SQLServer、教我三层架构 ......有一次他远程我电脑操作给我看,他操作了差不多一个小时,我经常熬夜做这个游戏,太累,中途我不小心睡着了。QQ 连续响了好几声给我吵醒了,原来是他在一直发消息:“你丫是不是睡着了”、“看懂了吗?”、“说话啊!”这个我记得最清楚。他气死了,我说我没看到,他说没看到活该!哈哈哈,我这不是太困了吗!当时他挺生气,后来还是又教我一遍怎么弄的。搞了一段时间,飞车可以登录游戏、注册游戏信息、同步个人信息、记录背包信息之类的。不知道是谁跟我说的,你这游戏又不能玩,那能叫游戏吗?我想想说得也对。所以服务器暂停了开发。我开始做核心玩法,做竞速赛。核心玩法谈何容易,网上虽然说有很多赛车的例子,但是没有一个是能很容易操作的。我学习 WheelCollider,自己写赛车移动!网上的代码一大堆,做出来的效果却差得要命。研究了一个月,我只做出了基本的前后左右移动,赛车漂移太难做了,始终做不出来。做不出来不强求,那就缓缓,过段时间再做。
2014年7月,第一次做出了看似“漂移”的效果,但其实无法操作,只能暂缓开发  图源:阿升
《QQ飞车》里面赛车撞墙后可以按 R 键复位到赛道中间,我分析了他的思路。自己花一个星期时间写了一个 CarWayPoints 插件。做完插件正休息呢,打开飞车的配置文件看看,每个地图都有一个 Map.txt,里面存的数据我一直不知道是干嘛的。我用自己写的 CarWayPoints 插件原理去尝试理解这些数字到底是代表什么意思。没想到真的还被我分析出来了!我写了一个工具,自动转换这些数字,为我 CarWayPoints 插件使用的 data 文件,完美运用!看看时间,时间过得好快,马上快过年了!今年一年我没赚到钱,仅仅是够生活而已。虽然学 Unity 才半年时间,但我鼓起勇气在网上投简历去找工作。确定上班时间是年后,正好拿这个当借口,我打电话回家告诉父母我找到工作了,先让他们高兴高兴。然后我接着又说,我过年不回家了,因为年后就要上班,我怕我来不及。当时我心里很难受,他们知道这个消息后也不舒服,可谁让我这么没本事呢,这一年仅凭教跳舞赚的钱太少了,让我省吃俭用过日子,哪还有脸回家。虽然我知道父母不要求我什么,能回去他们就满足了,可是我就是这么好强的一个人,对谁都这样。过年我啥也没买,就买了几包烟过年。街上一个人都没有了,卖煎饼的小贩也回家过年了。年前也没有去买菜,我知道过年那几天菜很贵,我也知道到上海后租房吃饭是大问题,所以只买了瓶拌饭酱回来。没菜,煮点白米饭,吃着拌饭酱,写完了 CarWaypoints 插件的说明文档,发布到博客上,当时过年还是有挺多人看博客的,但写博客的人很少。我的那篇文章成了一个星期内阅读量最多的文章。年就这样过去了。
2015年2月,CarWayPoints的部分截图 图源:阿升
前往上海,踏入职场过完年 ,我拖着行李来到了一线大城市——上海。记得第一次来上海面试的时候,不会坐地铁,不知道怎么买票,站旁边看了好几个人买票自己才上去试一下,坐地铁还坐过站了。出站的时候我看见别人都是在上面刷一下就出去了,我也跟着在后面刷,可是我怎么刷,我都走不出去。排在我后面的人看见了跟我说要把卡片插进去才可以!后来才知道人家那用的是公交卡,跟我手里的卡不一样。小时候,电视上说什么上海滩、大上海,还有夜上海那首歌,给我的印象是上海很大,都是有钱人的地方。十几岁的时候,追过一个女孩,那女孩的爸爸好像在上海工作当老板,她放暑假寒假也会去上海上补习班,经常去星巴克。没有追到她,但是我心里一直都是有阴影的,感觉自己配不上人家。她家里那么有钱,人又漂亮,在上海呆过见过大世面,星巴克我从来没有进去过,我当时都不知道里面到底是卖什么东西的,只知道里面一杯饮料就好几十块钱。上海从小到大给我的感觉就是可望不可即!可是今天,我也来上海了,来实现我的游戏梦!当时来面试的时候公司在一个大厂房里面,新公司在装修,临时在大厂房工作。去上班的那天,新公司装修好了!哇,好大,装修好漂亮!前台领我坐到了我的位置上,我正式入职了!刚进公司什么 SVN、RTX、禅道啥都不知道,还好有个胖胖的程序员帮我,他人很好,刚进公司就跟他最熟了。下班时间到了,大家都逐渐离开了公司。胖胖的程序员问:“你还不走,想加班啊?!”我心想我哪有地方去啊,身上就只有几百块钱。我说这不是等你一起走吗?离开公司后,我搜索了附近的青年旅社,看了几家,要么是太远,要么是人满了。后来在上海南站附近找了一家青年旅社,一晚上好像是 30 块钱。在青年旅社住了几天,我发现这样下去还撑不到发工资我就没钱吃饭了。晚上下班等大家都走了,我悄悄问胖胖的程序员能不能睡在公司,他说如果你愿意大冷天的睡公司没问题啊。他以为我是开玩笑的,没想到我真睡了。我把公司休闲区的沙发搬到空调底下,对着空调吹暖和一些,可是还是冷得不行,一晚上冻醒四五次,根本睡不好。我想只要熬过这第一个月就好了!
摄于2015年2月,无处可去的自己决定在当时的公司睡觉  图源:阿升
我半个月没洗澡,头发都油成了一坨,身上也一股味道,还好大家嘴巴上都没有嫌弃我。我把剩下的钱一咬牙,找了一家最便宜的能洗澡的宾馆,300 块钱,住了一晚上,把脏袜子洗了,然后洗了个澡!这是我半个月以来睡得最舒服的一次。钱花光了,没钱吃饭咯!如果晚下班的话,公司是免费提供晚餐的,所以我晚上待到很晚,这样一天就有一顿饭吃。熬过一个月,工资到手,好像是 3800 多点。心里很高兴,毕竟是自己人生的第一份正式工作。这时候项目总监跟我说现在要去深圳封闭开发三个月,包吃住,让我也去。我别提多高兴了,有吃的,还免费住,多好的事啊,果断签字同意了。我们公司是跟深圳一家大公司合作,是在南山科技园。到了深圳,我站在公司阳台上,看到了腾讯大厦,老激动了!
摄于2015年3月 随公司封闭开发来到深圳,在阳台拍下夜色中的腾讯大厦  图源:阿升下了班,我和主程特地跑过去近距离的在门口转悠了一会儿。我:“如果有一天我也能进腾讯多好。”主程:“唉,腾讯学历要求很严格的。”这家公司真的特别大,有一次听同事说这公司有好几个阳台,另外一个阳台有健身器材。我想过去瞅瞅,结果在公司迷路了 ......他们公司每个星期五下午会有点心,有时候是蛋糕,有时候是水果。他们公司的员工感觉就像是吃腻了一样,一点反应都没有 ...... 我们团队的人老激动了,每个人都拿了好几盒,哈哈!我们每天八点半起床走路半个多小时到公司,来得早的话还有早餐吃,来得晚的话啥也没有了。晚上正常下班,但我们程序一般会更晚,我和主程还有技术总监总是最晚的三个,回去的路上大家一起讨论今天的技术难点,哪些地方没有实现,有什么好的思路,很累,但很充实。
摄于2015年4月,和主程斌哥(左)与技术总监老蒙(右)回宿舍的路上 图源:阿升
在深圳我就一直改 bug,扩展原有的小的新功能,跟主程一起维护战斗系统。我的进步很快,不过我很满足,因为吃住不用愁。结果在深圳封闭开发了两个月我们就回上海了,原因不太好讲。回上海后我们在深圳辛辛苦苦开发了两个月的新玩法被老板直接停掉了。唉 ......在深圳两个月存了些钱,足够租房子的,我跟执行策划和专门做 UI 的程序员三个人合租了一套房子。
摄于封闭开发期间,附近应该是当时刚开始建地基的科兴D栋   图源:阿升
我这一间估计有不到十平米,一张床,一个电脑桌,一个衣柜就塞满了,1600 一个月。上海的房子真贵,贵得吓人 ......公司开始慢慢愿意让我做一些功能了,我上班一年,做了 7、8 个系统功能,自己感觉还是收获挺多的。其中有个功能,因为当时上面急着要这个新功能,我预估时间需要半个月,最快也得十天,项目总监说如果你能一个星期做完,我奖励你一个机械键盘,说到做到。然后我每天爆肝,把功能在一个星期内做完了,键盘真的到手了!正高兴呢,不知道谁说了一句这键盘仅仅是使用权!使用权!使用权!卧槽。不过后来想了想无所谓,一个键盘 700 块,我买得起!能够赶在一个星期之内能做完,说明我如果想做,还是可以做到的,对自己也是一种锻炼。
摄于2015年8月,公司奖励的机械键盘(使用权!)  图源:阿升
我经常留得很晚,每天晚上就基本只剩我和技术总监两个人。因为自己太笨了,东西安排得也多,时间也很紧张,所以没办法每天都要工作到那么晚。但很晚也有好处,可以跟项目总监交流学习。每当我写代码写累了或者感觉他写代码写累了,我就会主动去喊他透透气,顺便聊天问一些自己不懂的地方。他人很好,很耐心地解释给我听,教我原理!他好像什么都懂,问他什么都知道。那肯定了,不然人家咋能当技术总监呢。下半年我熟悉了这个游戏,做东西也慢慢快起来了!但是我还是很晚才回去,到家了也继续研究我的飞车。有次在网上瞎逛,看到一个《QQ飞车》道具城,网页里有好多飞车里面的道具,可以直接购买。我看到那么多道具图标,心想我遍历一下,那岂不是所有道具图标我都能得到了吗!正好 gsa 文件我解不开,干脆从网页里直接获取。于是写了一个小程序,通过道具地址+道具 ID 把所有道具图片资源都遍历下载了下来。哈哈,踏破铁鞋无觅处,得来全不费工夫。好事接二连三地发生,我在网上看到一坨代码,看起来像是解析某个图像的。我研究了一下,他解析的图像跟 gsa 文件的结构特别像!我又激动了。那些代码我不知道是用什么语言写的,但是我能看懂,我就把那些代码翻译成了 C# 代码。好多 API 不一样,一百来句代码我翻译成 C# 搞了好几个小时,终于能跑通了。把 gsa 文件读入进来解析试试!卧槽!成功了居然,居然把 gsa 文件给解析出来了。但是有色差,应该是代码写错了,找到问题所在,修复了这个 bug,成功写出 gsa 解析器。我发现一个一个手动解析速度太慢,干脆递归遍历所有 gsa,全部自动解析得了。就这样,我从网页上的一坨代码翻译成 C#,做了一个 gsa 解析器,得到了飞车里所有高清图片资源。资源是拿到了,可是现在暂时不用,我现在是全心全意的在研究赛车漂移呢。以前我一直在研究 WheelCollider,想用它做出飞车那样的效果,可是发现这个组件真的很蛋疼。很多东西我想改,但是不能改,因为我没代码啊。一不做二不休,我放弃了 WheelCollider,直接操作刚体,使用 addforce 模拟动力。轮胎悬挂全部都是模拟出来的假象,正像飞车那样,真实的赛车哪有那样的物理效果啊?都是模拟出来的假象。漂移也很轻松的做出来了感觉,但是离我想要的漂移还差得有些距离,不过没关系,我相信我肯定可以做出来,只是时间问题而已。
摄于2016年,自己开发中的《飞车》 图源:阿升
裸辞离开,偶遇契机匆匆忙忙又是一年,春节后回公司我就立即提交了离职申请,我不知道我当时为什么会这么急,只知道心里很乱、很烦。憋了一段时间后跟朋友提起这件事,朋友说我还是太年轻、太浮躁!或许吧!我也不知道。这是我的第一份正经工作,从进入公司的那天起,心里别提多高兴了,我终于也可以做游戏了,这对于我来说,真的好不容易。离开公司有多方面原因,我最大的不舍就是技术总监老蒙和嘻嘻哈哈的团队。虽然跟策划撕逼,但是大家也是为了让游戏更好,私下都相处得不错的。技术总监老蒙帮助了我很多,从他身上我学到的不仅有技术,还有对待事情的态度。那天请吃离别饭,团队的二十多个人都到了,美术不熟,没叫。大家一起开开心心地吃饭。那天老蒙主动开了瓶啤酒,我很惊讶,老蒙从来没见过他喝酒的。平时工作累,身体太虚了,我喝了两瓶酒下肚,有点晕晕的。以前一个人能喝一箱,和以前比起来感觉差多了。我让老蒙旁边的程序坐到了我的位置上,跟老蒙聊着天。说着说着我不知道咋的就哭了,哭得话都说不清楚了。老蒙帮我真的太多,我没有什么能感谢他的,也只能希望在今后的路上自己更加努力,别让他失望。我交接工作文档写好的时候发给他,让他验收,他这才知道我要离职。我一直没勇气跟他说我要离职,我不知道怎么开口。他 QQ 收到了我的文档,过了好久,他才回复我:“你真的忍心抛下我们就这样走了吗?虽然说人各有志,但是我自私点,我还是希望你能留下来。”看到这句话,我心里更不是滋味!老蒙,你就当是我年少轻狂不懂事吧,对不起,做出这个让大家都难过的决定。如果有机会,我们以后再一起共事。裸辞后发现工作现在真的好难找!好多公司都倒闭了,市面上 U3D 程序一抓一大把。投了好多家简历,看见招人我就投,大多数都是投出去就没消息了。后来有一家公司愿意要我,叫我去面试。他听了我的介绍,说我是他见过路子最野的程序员。听到这里,我以为又没戏了,可是他要我了,他表示他看好我,想试一试。好吧,既然这么看好我,那我也尽全力,争取不让看好我的人失望。在决定录用前,项目总监告诉我他们开了一个十年项目经验的程序员,还有个大厂出来的也被开了。我瞬间亚历山大,心想那么叼的人都被开,我这才一年工作经验,能胜任吗?我怕我把他们坑了,所以我告诉他,距离我入职还有十天时间,这十天我会做一个 demo,如果达不到你们想要的效果,我就不入职了。他说不用给自己这么大压力的!可我是认真的。我花了三天时间做了一个 demo,录制了视频发过去,他表示还不错,比之前的人做得好。得到认可,我心里总算舒缓一些了。做之前我心里也没底,甚至不知道自己能不能做出来。或许我只是用心尽全力去做了,技术跟他们相比我还差得太远太远。用心尽全力去做游戏,不能让看好我的人失望,不能让自己失望,仅此而已。这家公司到底能不能让我留下来,我不知道。在这种不确定的情绪里,我产生了个念头,开始在博客上写这篇文,回顾下这些年都经历了什么。不是我傲娇,只是很多时候我不甘于现状想往上爬,因为没有退路,掉下去就可能再也爬不上来了。等我哪天落魄了或者牛逼了,回头看看,或许才知道我年轻时的决定到底是对还是错。幸运的是,这家公司最后还是要了我,总共三个程序员,只有我有过赛车游戏的经验,负责开发赛车控制和玩法部分。工作还是很忙,但我已经习惯了这种节奏,只是有时感到比以前孤独,下班回到家就继续研究自己的游戏。有天凌晨,一个人突然加了我的 QQ,联系我,说他是腾讯的。我心里一惊,觉得这肯定是个骗子,他又说了些事我才勉强相信,结果下一句又让我怀疑起来。他说《QQ飞车》项目组看到了你的博客,大家对你的经历很感兴趣,有没有空来深圳聊聊?我心想这该不会是要诓我过去,然后当场抓起来吧。毕竟我拿到的一些游戏资源,其实是反编译的,说不准会告我侵权,心里挺害怕的。但冷静之后想一想,我一没靠这东西盈利,二又穷得叮当响,想骗我也骗不到钱,能有什么损失?后面就买了机票,背着电脑来到深圳,好像又回到了跟着主程在深圳封闭开发,特地跑去腾讯大门口转悠的时候。
打包前往深圳的前一天   图源:阿升
来了之后发现没有骗我,也没有想象中的三堂会审,而是喊了超多人一起去吃饭,场面很壮观,对我态度也很亲切。作为一个《QQ飞车》的老玩家,我真是受宠若惊,后来才知道里面有那么多大佬。吃完饭他们带着我在工作室参观了一圈,也听我讲了自己的故事,在休闲区我把电脑打开,给他们展示了自己还不成熟的作品,但大家都很给面子,一个个排队试玩,让我高兴得头晕。他们鼓励我来应聘试试,我也认真准备了。后来回到上海,一边上班一边等消息,不敢抱希望,但又很不想失望,晚上辗转反侧。有天上班的时候接到电话,我好像有种预感,站起来接了,感觉难以置信,像梦里一样恍惚,居然真的有机会参与做官方的飞车手游,而不再是一个人的自娱自乐。就这样,我来到了天美。
摄于2016年5月,入职第一天,艳阳下的科兴 图源:阿升
转眼已经过去了 5 年,我还是每天下班了会玩会飞车,我的企业微信签名也一直都是“疯狂漂移中...”。它成了一种习惯,一个第二世界,开发它的想法把我从最颓废的一年里拔了出来,学习编程技术,一步步走到今天,我也希望能继续看着它,能开向多远的未来。后记《QQ飞车》项目组最初因博客上的文章注意到了“热心玩家”阿升,考虑到他的反编译行为未构成盈利,也未将破解资源向第三方公布,以及他个人研究的初衷,决定当面友好沟通。在面谈与体验他的《手机版QQ飞车》后,项目组更多被他作为老玩家的热忱所打动,最终决定不追责他的侵权行为,但仍保留权利,并鼓励他参与正式的应聘流程。阿升也最终成功通过社招,参与到官方版《QQ飞车手游》的研发中。未经软件著作权人许可,反编译软件资源并向第三方提供的,均属违法侵权行为,也是不被提倡的。希望有意参与研发过程的同学,都能努力提升自己,并参与正式的应聘流程,踏上青睐的职业道路。最后,不论路途几多曲折,起步有多晚,只要坚持不气馁,总能抵达终点。也欢迎所有优秀人才加入天美 J1 工作室,可点击文末“阅读原文”查看岗位信息。简历可投递至 kayzrlin@tencent.com

# 技术人直播 #八位腾讯不同岗位、不同背景的技术人,分享各自的技术故事与成长路径。每周三晚19:30,锁定【腾讯程序员】视频号直播间,听听过来人讲述他们的迷茫与选择。 积极参与直播互动还可获得鹅厂公仔噢!

预约【Terry】的直播间👇除了直播之外,我们还会同步技术人的条漫、文章,
那不如,点个关注,听我们慢慢讲给你听👂

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存