图:在虚拟空间跳舞的符号 游戏程序揭秘
17173独家专稿,转载请注明出处
文/七月流火
中国的网络游戏开发行业一直以来就流传这“策划论”和“程序论”这两种观点。坚持“程序论”的人们认为,目前中国的网络游戏市场,用户群体在不断的高速扩张,任何游戏都不会缺乏用户,只要能够保证给玩家一个稳定的游戏环境,即使没有太多的创意,游戏也能存活并发展下去。
在之前我们的策划以及美术采访中,我们曾经提过这样一个说法:策划像一个人的大脑,指挥着整个游戏的运转。而美术则像一个人的皮肤,吸引着人们的眼球。那么程序呢?它就像一个人的骨骼,有了大脑的指挥,有了美丽的外表,那仍然只是一具足以乱真的标本,而只有具备了健全的骨骼,一个人才能真正跑起来。从这个意义上来说,程序可能上比策划和美术更加重要。
在本次入驻网易《天下贰》开发组长达一周的探访时间里,我们自然也不可能遗漏程序这样一个至关重要的部门,而本期访谈,我们请来了网易在线游戏事业部技术部《天下贰》组组长关子敬,请他来谈谈《天下贰》程序开发方面的问题吧。
17173:游戏程序在玩家看来似乎深不可测,您能不能对这个职业做个简单的定义,让大家有一个大体的认识?
关子敬:最简单的来说,就是把其他开发人员的设计意图表现出来。
策划的想法,最直接的就是由美术来进行表现,而美术方面在制作出精美的人物、场景等等素材之后,就需要程序来进行结合了。程序并不单单只为策划和美术进行服务,我们还经常为测试部门、运维部门等等部门进行服务,他们很多的工作都依赖于程序开发出的工具。
可以这样来理解,程序就像一个平台,在这个平台上,网游开发其他的各个部门才能很好的运作起来。
17173:例如美术,其中有分人物组,场景组,还有2D、3D之分,策划也有剧情策划、数据策划等等,那么程序是如何划分呢?各个不同划分他们的工作职能又是什么样的呢?
关子敬:如果按照这样的定义的话,那么程序可以分为客户端的程序员、服务器端的程序员、还有专门开发工具的程序员。如果按照开发对象的划分来说,则有专门为美术服务的程序员、专门为策划服务的程序员、国外甚至还有专门开发AI(人工智能)的程序员等等。
程序员的工作比较不容易用文字解释出来,对于不了解程序的人来说,他们之间的区别不大,都是一行行的代码(笑)。举个比较具体的例子来解释可能比较形象。大家都知道的美术人员在开发工作中需要画画,那么他们把形象制作出来之后就需要应用程序为他们专门开发的工具将之导入。这些工具一般来说每个游戏都会有不同,是游戏中特有的。而我们程序需要做的是在技术层面保证这些部门能够顺利的运作。当然还有更重要的也就是我们大家经常讲到的客户端和服务器端的程序设计,这个就比较难用文字表达了。
17173:对于玩家来说确实程序方面的内容是不容易理解的,那您是否可以将它量化出来?比如《天下贰》这个游戏,它有多少行的代码呢?制作完成这些代码又需要多少时间呢?
关子敬:《天下贰》来说它的代码没有具体去统计过,大概的估计可能有超过百万行的代码组成吧。讲到制作时间的话,按照我的经验来看,如果这百万行的代码完全是从零开始制作,到一个可以稳定运营的成熟阶段,起码需要5~6年的时间。所以我们现在一般都是选择一些比较合适的成熟引擎,在它们的基础上再进行改善和制作。
17173:你刚才提到了“引擎”,这个词对于现在的玩家来说是很熟悉了,但是普通玩家可能真正了解“引擎”是什么的并不多,你能不能跟我们解释一下这个引擎到底是什么,在开发工作中选择“引擎”的标准又是什么?
关子敬:首先“引擎”就是代码,它并不像我们日常看到的机械引擎一样是一个实体。游戏引擎的功能就是提供给游戏制作者一些通用部分的游戏代码。有了一个引擎以后,我们就不需要再去开发每个游戏都需要的那些代码部分。比如说,每个网络游戏都需要关于网络功能部分的代码,如果没有引擎,那我们每做一个游戏,就需要把这部分内容的代码重新写一遍,而有了引擎提供的通用代码,就可以大大减少这些不必要的工作量。当然,每个游戏引擎由于代码有所不同,所具备的功能也有所侧重,有些引擎可能在网络功能上表现比较优秀,而有些引擎则在画面表现力方面更胜一筹。我们就需要根据游戏的需要选择相关的引擎。
17173:嗯,你这样解释一下,相信大部分玩家都可以对引擎的概念有一个初步的认识了。我们很多玩家都听说过一些著名的游戏引擎,例如“虚幻2”引擎,你能不能介绍一下《天下贰》是如何选择引擎的,为什么不采用例如“虚幻2”这样的引擎呢?
关子敬:我们也曾经研究过“虚幻2”的引擎,它是一个在客户端方面表现比较突出的引擎。我们之所以不选择它的原因就是当时它是没有服务端部分的,也就是没有网络能力的。作为开发一个大型的网络游戏来说就不是那么适合。因为国外也有过一些案例,采用它来制作网游,效果并不是很好,没有我们就没有选择它。
17173:BUG是玩家最痛恨的一种游戏现象之一,有些游戏BUG被部分玩家利用谋取利益,有些BUG则给玩家带来不便甚至是利益上的损失。BUG的种类很多,例如有些地方看着有路却走不过去,而有些地方进得去却卡着出不来,这些BUG是如何产生的呢?又需要通过程序如何来解决呢?解决的时间又需要多少呢?
关子敬:就像你说的,BUG的种类很多,很难一下解释清除所有的BUG是怎么产生的。我以你刚才提到的例子来说明一下,这两个BUG都是3D游戏中经常出现的。简单解释话,第一个看着路却又走不过去的原因就是可能那里有一个障碍物,例如一个NPC或者建筑物,但是制作人员忘记了将它表现出来。而后一种则是代码在计算碰撞时的产生的误差,两个方向计算得到的结果不同,玩家就被卡在了那里。这也是现在大部分游戏都要设置“回城”功能的原因之一。
通常这类BUG都要通过补丁的更新来进行修正,在补丁中我们可以把挡住路的障碍物移开啦,或者是调整一下容易卡着玩家的地方的大小啦等等。像《天下贰》来说,我们基本上达到了每周都会推出一个补丁,修正一些BUG,同时进行一些安全更新等。除了我刚才讲到的修正一些BUG以外,补丁里还有最主要的工作就是推出一些新的玩法,新的场景、道具等等。《天下贰》更新的速度很快,我们的压力也比较重。每次更新中新玩法的制作、测试、升级包的制作等方面都需要程序和其他各个部门通力合作,才能做出一系列的内容来。
还有一些BUG是不需要通过补丁来进行修正的,我们可以在游戏里进行调整,例如一些游戏数据、逻辑计算等。比如《天下贰》里玩家卖一些道具的价格啊、学技能的花费、任务得到奖励的多少啊这些,就可以直接进行修正。
17173:现在游戏做的越来越精美,同时要求也越来越高。我们也经常看到游戏厂商提出“优化”这个概念,那么对于程序来说,什么是优化,你们是通过什么手段达到优化目的的。
关子敬:“优化”采用通俗的说法就是可以让玩家玩的更爽。简单的说就是让玩家的电脑在进行游戏时占用更少的内存和带宽。如果需要保证游戏品质不降低的话,优化一般常用的手段就是尽量把玩家最关心的内容表现出来。比如在《天下贰》中,我们会调整玩家的视距,减少在玩家视线中出现的模型数量,这样占用的资源就会减少。可以让玩家用有限的资源去取得更好的效果,当然这都是在玩家硬件条件不够的情况下需要做出的设置。而且我们《天下贰》采用的服务器技术是集群式的,我们可以根据玩家进入的数量随时调整服务器的数量,尽可能的保证游戏在服务器层面上能够满足玩家的需要。
17173:讲到服务器技术,我们看到许多游戏宣传的时候都在讲服务器可以达到几万甚至十几万人在线,你认为这可以实现吗?如果可以实现的话,为什么我们经常看到一组服务器进入到几千人的时候就会很卡了呢?
关子敬:理论上来说,根据引擎的好坏,是可以实现承载这么多玩家同时在线的。就像我们的《天下贰》引擎,也是号称可以同时一百万人在线。但是这要受到游戏设计时玩法的限制——游戏是否能做到把玩家合理的分布到各个区域里去。许多游戏会有这样的现象,就是某个时间段玩家会大量集中到游戏中的某个区域里去,造成局部的拥挤。这样的话,一个可能是服务器无法承受这个局部的负载,另一种可能就是在客户端部分无法承载这样的资源占用,导致了和服务器无法同步,所以会让玩家觉得很卡。这个现象每个游戏都有不同,要具体问题具体分析,不能一概而论就是服务器段技术的问题或是服务器质量的问题。
17173:现在对于很多游戏开发的程序人员来说,最让他们头疼的就是外挂了。你能不能向大家解释一下外挂制作的原理,外挂到底是如何实现其功能的。
关子敬:按照程序层面来看,外挂一般分为两种,一种是不需要破解客户端的,比如一些在游戏内进行重复操作功能的软件,好比按键精灵这样的脚本程序。另外一种就是需要破解客户端的,最常见的就是一些脱机外挂。
对于不需要破解客户端的这种脚本式外挂,程序上的防治一般比较困难,更多的需要通过策划,在玩法上进行预防。
而破解客户端的外挂,它一般需要去了解到游戏的协议,运算方法之类的规则。最好的防治方法就是不断的采取更新。实际上一般外挂也并没有完全破解整个客户端程序,而只是破解了比较小的一部分。目前大部分游戏重要的逻辑运算都是在服务器端完成的,即使破解了客户端也不可能达到直接战胜对方,或者提升属性这样的功能。所以,现在更多的外挂程序都是在破解了一些方面的运算规则以后,采取模拟客户端的方式来代替玩家进行一些游戏功能。所以我们要通过不断的更新,改变我们实现游戏的运算规则,这样即使被外挂破解了本次的运算协议,而你在短时间里更新了你的运算协议,那么外挂之前的破解也就失效了。
举个比较简单形象的例子来说明:假设你在进行某个功能例如打怪时候,程序实现它的规则是A+B+C+D的话,一但被外挂制作者了解了这个运算规则,他就可以按照这个规则模拟出一个客户端来实现这个功能。而如果开发者改变了这个规则,变成了A+D+B+C,那么之前外挂制作者制作出的这个模拟客户端的运算方式就不能被服务器所接受,那么这个模拟器也就失效了。如果外挂破解运算规则的时间要高于每次改变运算规则的时间,那么外挂也就不能实现了。
怎么样,看完了这些内容,大家是否对游戏程序这个职业有了更多的了解了呢。游戏程序每天对着十分枯燥的代码还要保证一个严谨的态度来进行工作,真是十分不容易。我们也应该对这些开发者们报以更高的敬意,不管他们目前开发的产品是否能够达到我们期望的目标,但起码他们一直在很努力的想为我们制作出优秀的游戏产品,只有我们玩家能够给予更多的支持和关注,他们才能保持更高的热情继续努力下去。
关于程序的新闻
- (2025-10-30) 《中华三国志》关于在上次更新中出现的一些问题,做一个统一说明。
- (2025-08-12) 《拉米:程序与咖啡》开发历程、挑战与未来更新计划
- (2014-03-14) 干货:游戏公司有必要进行“编程马拉松”的3个理由
- (2012-11-05) Windows 8亮点应用:“私人照片”保护相册不被窥视
- (2012-10-28) Xbox SmartGlass登陆Windows Phone后 Android版也发布







