更多行业干货,上网易游戏学院app查看!https://game.academy.163.com/ssi/app/?referrer=niuke


对于热爱游戏的人,能够开发出一款自己的游戏,绝对是一件很酷很有格调的事。游戏行业的高成长高回报,也吸引着越来越多的程序员跃跃欲试。

我是网易游戏的程序开发文翔,今天就想和大家分享一下,从爱玩游戏开发游戏,我都经历了什么?

与父母斗智斗勇的游戏开发之路】

我从小就是一个爱打游戏的人,与电脑的结缘在我六岁的时候,我爸在报纸上看到一篇专家写的报道称电子游戏能开发儿童智力。我爸是大学老师,他当时管理着一个实验室。于是乎,每周我爸都会带我去机房玩电脑,在那时,从吃豆人、大金刚到疯狂赛车,这些现在看来画面非常简陋的游戏给我带来了无穷的快乐。

然而好景不长,半年后我爸在报纸上看到另外一篇专家写的报道称电子游戏会损害儿童的脑部发育。从那以后,我爸再也不让我接触电脑。然而此时我已一发不可收拾,从此与父母围绕着电脑游戏展开了十多年的斗智斗勇。偷偷去同学家玩,父母不在家时玩,调闹钟半夜起床玩,不一而足。

初中,我开始接触到了计算机编程。当时学校有开设编程课外兴趣班,用Pascal语言在屏幕上绘制字符画。对于大部分人来说,在黑底白字的命令行中输入一些意味不明的英文字母,然后等待返回结果是一件非常枯燥的事情。对于我来说也是一样。但学习编程是我为数不多的能够光明正大地“玩电脑”的机会,因此我咬牙坚持了下来。

大学读的是软件工程专业。由于有初中和高中的编程基础,课程对于我来说比较简单。大一结束时,有一门C++语言的大作业,要求完成一个命令行输入的计算器小程序。此时这种练手类型的小程序已经满足不了我了,我希望去开发一些“真正有趣”的程序。一个想法在我脑海里浮现——既然如此喜爱电脑游戏,我何不自己开发一个呢?

编码+游戏,双重成就让我沉迷

一本名为“Windows游戏开发”的书成了我的启蒙之书,闷头钻研了一个暑假,最终做出来了一款有十个关卡的贪吃蛇游戏。

游戏制作完成后,热情高涨的我还为它制作了一个漂亮的UI界面,并配上了背景音乐和音效。作业展示时,绝大部分同学的展示的都是黑底白字的命令行,我的贪吃蛇游戏简直是其中的一股清流。毫无疑问,我的作品获得了满分。收货了巨大成功喜悦的我从此坚定地走上了游戏开发的道路。

第一次实习,团队开发的是一款格斗游戏。那时的我除了心情激动以外,格斗游戏一无所知,看着策划需求二脸懵逼。为了尽快弄明白游戏原理,向前辈请教,阅读代码,网上查资料。一开始虽然进展缓慢,但随着时间推移,事情渐渐豁然开朗。

噢,原来抓投技可以破防,是因为判定的优先级不同。

噢,原来打在不同部位伤害不一样,只是简单的矩形相交检测。

曾经我只是芸芸玩家中的一个,而现在游戏机制的秘密在向我徐徐展开。我把每一个难题当做游戏中的关卡去攻克。当实习结束时,已经对格斗游戏的机制了解得七七八八,再也不会手足无措。

编程与游戏一样,也是智力活动。编程讲究的是代码形式上的优雅,结构上的稳定,与性能上的高效。就像是使用最少的建筑材料,搭建出最高的宝塔,是一门十足的手艺活。一旦沉浸在编程的世界中,所获得的身心上的愉悦不逊于沉迷游戏,而使用拿手的编程语言,看着游戏的玩法一步步地在手中实现,就获得了双倍的快乐。

【淌过菜鸟之路,在写Bug中不断成长】

后来,有幸加入了《乱斗西游》项目组。相对于格斗游戏来说,MOBA游戏的技能机制复杂了一个数量级。此时的我踌躇满志,对所有代码都不放在眼里,却不想闯出了一个不大不小的祸来。


一次,要制作一个新英雄。有一个技能,可以让敌方目标单位复制出多个幻象,当AOE技能打在这些幻象身上时,敌方目标单位就会受到多重的伤害。此时《乱斗西游》已有多达50位英雄,比较稳妥的做法应该是一一标记出属于AOE的技能,并在它们结算时增加一定的伤害。而我出于偷懒没有这么做,而是创建了几个隐藏的实体接收伤害,并将伤害转移到敌方目标单位上。没想到,有些英雄的技能与这个新英雄的技能产生了连锁反应,可以打出“爆炸伤害”。此时新英雄已经推出,覆水难收,策划就默默地接受了这个设定。

经过这件事情,我在后续的开发工作中成熟了许多,除了实现策划需求外,还要多考虑可能会发生的情况,避免出现意料之外的问题。

而现在,我加入了《明日之后》项目组。《明日之后》是一个自由视角的3D游戏,场景非常复杂,性能压力很大。我开始慢慢地接手游戏引擎的研发和优化工作。如果说游戏是一出盛大的戏剧,那么游戏引擎就是承载它的舞台。游戏引擎应该是稳定而高效的,只要出现了bug基本上就是大bug。

当时整个项目组都在热火朝天地进行开发,而我为了提高游戏的帧率,不得不逐步重写掉部分渲染逻辑。我感觉我所做的事情就是在帮一辆飞速行驶的汽车换轮子。幸好多年的游戏开发也为我积累了大量的经验。最终,我成功地在不影响项目组开发进度的情况下,完成了引擎底层渲染的重构工作。


【选择了游戏开发就选择了学习】

游戏与常规软件最大的不同之处在于,每个游戏都是独一无二的。每个游戏都希望给玩家带来独特的体验,由此衍生出的游戏类型各不相同。从最为流行的车枪球(赛车、射击、体育)游戏,到稍显小众的文字冒险游戏;从惊悚吓人的恐怖游戏,到画面优美的互动电影;从血脉偾张的格斗游戏,到烧脑的策略游戏;游戏的种类多如牛毛。游戏种类的繁多,导致游戏开发中用到的技术非常的多,不同游戏用到的技术也不尽相同。


例如,《守望先锋》是一个强调团队合作的第一人称射击游戏,这种类型的游戏需要给玩家提供低延迟、高同步的操作体验,流畅的角色动作,酷炫的技能效果,以及与场景较为真实的物理互动。因此,《守望先锋》使用到的技术包括客户端操作预计算、状态快照与回滚、场景遮挡剔除、反向动力学骨骼、物理系统等。

而同为暴雪出品的另一款游戏《星际争霸》,则使用了许多与《守望先锋》不同的技术。作为一款支持自定义地图的即时战略游戏,《星际争霸》使用到的技术包括基于状态机或行为树的AI、大规模动态单位寻路、用于支持录像回放功能的事件与操作记录、以及一个功能十分强大的游戏编辑器。

完全学习和掌握这些游戏中常用的技术,需要花费大量的时间。同时,随着时代的发展,技术也在不断地革新、发展。因此对于身为游戏程序员的我们来说,强大的学习能力是必不可少的。


对于我自己,我经常会在网上搜索我感兴趣的游戏技术。比如当初在玩魔兽世界的时候,我很好奇魔兽世界是如何做到跨地图无缝衔接的。通过Google,我了解到了世界服务器与地图服务器的架构,了解到了玩家角色是如何在不同地图服务器之间迁移的。随后我会开始思考,如果要我实现一套这样的架构,会遇到哪些难点?需要解决哪些问题?这种思考不需要实际写出代码,只是纯粹的脑力锻炼,但是对于记忆和理解非常的有帮助。

对于更进阶的游戏技术,我推荐观看GDC的技术分享。GDC中文名是游戏开发者大会。每年,在GDC上,来自世界各地的游戏开发者齐聚一堂,分享各自的经验和技术。GDC上分享的技术类别很广,包括渲染方面的、游戏玩法方面的、美术制作方面的等等。一般来说,GDC上分享的都是次世代技术,学习难度较大,适合对游戏开发技术已经有一定基础的同学观看。


网易游戏内部也有着良好的知识分享传统和氛围。网易游戏的各个项目组,在尝试了新的游戏开发技术后,都会在内部的分享平台——KM上进行分享。同时,网易游戏还会定期组织沙龙分享会,让不同项目组的程序员们可以面对面地进行技术交流。通过阅读KM分享、以及参加沙龙,让我接触和学习到了不少新知识。

古人云,读书破万卷,下笔如有神。只有平日不断地学习和积累各种游戏开发技术,在遇到新的问题时才能从容不迫,解决方案信手拈来。

【最重要的,要有爱】

做游戏其实是一件很累的事。

每天都会遇到新的困难,刚解决完一个问题,下一个挑战已经在等着你。各种各样的情况都可能会导致项目延期。也许是策划在设计时没有考虑清楚,也许是美术希望实现一个当前机能无法承载的美术效果,又或许是你自己,在程序中无意间埋下了bug。一方面是游戏发布前的加班加点,另一方面是来自玩家期待的压力,指责跳票,身心都备受煎熬。

但对于我来说,只要真正热爱游戏,所有的困难都不是问题,所有的困难都只是暂时的。完成了一件作品,有许多玩家喜欢这件作品,这才是最重要的,因为我是一名游戏程序员。

最后,写给有志加入游戏行业的同学:

如果你只是被游戏行业的高薪所吸引而选择加入这个行业,那么要知道,高薪同时也意味着高强度和高压力,但它的确是一个值得你去奋斗的行业,希望不久的将来你会爱上这个行业。

如果你和我一样,从一开始就打心底里喜欢游戏,并希望有朝一日能制作属于自己的游戏,那么欢迎加入,来游戏,就是玩。

更多行业干货,上网易游戏学院app查看!https://game.academy.163.com/ssi/app/?referrer=niuke

网易游戏内推及内部职业干货交流群,入群即可享受超多福利!!

入群方式:链接进入【网易互娱|校招知识储备&新游体验馆探营无限福利群】:https://jq.qq.com/?_wv=1027&k=5dJP4EB

还可以添加“网易游戏学院菌”微信号(NetEase_study)及时获取更多知识干货哦!