|
楼主 |
发表于 2004-3-8 18:49:00
|
显示全部楼层
Re: 电脑游戏结构与设计——第十四章
[嗯,的确如此,]福尔摩斯回复,[不过你听听下面的。在第二天下午,史纳德斯的确去找佛瑟基尔,并问了同样的问题。而且??如同你刚刚的问题一样??他的回答是,在看过相关的文件之后,他相信他应该可以在三个月左右的时间完工,而其中预估的错误解决时间差不多要一个半月;换之,他说应该最少花一个半月,最多四个半月,而最有可能的时间将是三个月。]
[很有趣,福尔摩斯。那史纳德斯如何回复这一点?]华生询问。
[他这样回复,]福尔摩斯回答,[史纳德斯微笑,并说他十分高兴佛瑟基尔可以在一个半月的时间把它完成。佛瑟基尔被吓呆了。这时史纳德斯已经离开了犯罪现场,向他的老板回报好消息。]
[这个结果真的太让人不满意了,福尔摩斯,]华生惊愕的表示,[在这种鄙俗的手段之后,有进行任何方面的研发吗?]
[只不过是史纳德斯在花了三个月再加上一个星期的时间把工作完成后,在他的老板面前看起来笨拙无比,]福尔摩斯微笑着。
在这个有点想象性质的真实事件中,指出了一个重点:一个很危险的人,只会听到他们想要听的东西,而且他们会在他们规划时去责怪其他人的错误,但这却是以他们听进去的东西为基础。
在案例研究14.1中,虽然它的表现方式并不那么真实,但却是塌实而不幸的事件,而且经常发生。
除了缺乏详细规格相关资料与实行时的需求,不可能正确预估出时间长短以外,参与的研发者仍然给了最有可能的评估。管理者选择接受较低的范围,主要是因为它更适合他的目标,然后忽视掉最精准的预估值,除非在一连串的好运重叠之下,几乎不可能达成目标。
这些现象不只会降临到一个企划,让结构与设计的阶段中出现困难。在上一个状况中,很明显的是在设计与结构的领域有模糊的现象,而且没有人遵循80/20规则。
不幸的,当设计者或是结构师在制作出一个过度简单的设计时,运用80/20规则并无法侦测出来。一个太过简单的设计无法充份处理主要问题,必然会导向一个有企划必须加以修正与重新施行,以更为强大的型式来符合需求。这是一个很难查出来的问题,在设计太简单时会很不明显,尤其是在游戏设计的状况下,一个过度简单的游戏却在过程中花费很长的时间,而这部份通常是由于延长的游戏测试。
唯一可以避免白白努力二年的方式,就是多做一些努力,采用原型的方式把问题找出来。做一个模型对游戏性通常都有正面的帮助,它不需要十分奢侈、快速或是详细。在我的许多个企划中,我甚至没有想过要利用电脑来制作初始的游戏原型,而是采用手中的材料:铅笔、纸、积木、玩具车等等。
这个技巧在其他的案例中也很成功。您的脑中并不会马上弹出合适的名称,但是一些在PlayStation或是PC上成功的俯视赛车游戏,就是用玩具车以及很庞大的地板设计出来的。
有时可以采用桌上游戏来做为游戏的原型,或是用纸笔来设计角色扮演游戏,才能想出正确的运作方式,加入其他的选择。最近有些更为先进的原型解决方案出现在市场上面,这些都是应用程式,可以提供一个虚拟的测试台看出相互关系以及行为方式。一个特别好用的工具(而且,事实上,是我目前使用的是Virtools制作的NemoDev,可以在他们的网站中找到详细的内容www.nemosoftware.com)。这个套装可以提供一个完整的3D世界,并把角色放在其中,在有必要的时候也可以利用C++的界面,来扩展原有的行为积木。
我并没有机会尽量的运用这个套装程式,但这似乎是另一个制作原型的好方向,而且它也可以为最后完成的产品提供相关的资讯。这并不是唯一可用的产品:其他类似的产品也有在市面上出现,但是不管它们的技术能力多好,在市场上面并不出名。
我在这方面的个人理论是以游戏研发者的本质为基础。研发者??尤其是游戏研发者??都具有很高的竞争性。我记得之前对一家软体公司示范一个以Voxel为基础的图象技术(这是全新而且之前从来没有人做过的)。这家公司的总企划派了他的一位程式设计师,来看看这个展示程式。在没有错误之下,当时的展示让人留下深刻的印象??3D加速卡这种东西只是地平线上的一个远方小点,我的技术史无前例的,在同一个画面中显示了数个高品质的3D物件。程式设计师在看到展示时的反应十分震惊,然后下一个评语是这种效果很容易做出来,而且他的言下之间是他一个人就能办到。我对这件事的回应是马上问他,为什么他现在却做不到。
我稍后从总企划那边得知,有一个特别的研发者想要靠自己组成一个研发小组,并以自由作家的方式来工作。而他对于任何有那种想法的人表示出极度的憎恶。
这个重点在于游戏研发者一向想要[自个来]。他们宁愿不相信外面研发者所完成的程式码与元件,这一点现今很难判定,因为所有游戏研发(掌上型游乐器,象Gameboy是一个例外)都是透过软体界面,象是PC上的DirectX。
不过,虽然这些软体界面看来避无可避,游戏研发者仍有特定的毛病。对这些研发者而言,这些软体界面已经成为新的[金属],也就是他们能够接触到的最下层系统。他们之中,没有人想让任何人插手于他们与系统最低层级(也就是系统应用程式,API)之间。
真希望这种态度会随着时间而不断软化,尤其是当程式设计师了解到外来的程式模组,远比他们在任何时段中写出来的东西都要好之后。
这已经开始发生了。在看到了《雷神之?》与《雷神之?2》引擎的成功之后,他们授权给许多的研发者,并用来设计出很成功的游戏,象是《战??笨铡贰2还??独咨裰?m》引擎是这个规则中的例外。在ID Software中的程式设计师,都被人认为是产业界中制作3D引擎的高手,而这正是《雷神之?》与《雷神之?2》的成功所带来的名声,这导致这些引擎能够散布得这么广(译注:这也与ID Software公司惯于利用所有法律途径保护他们的程式码,再全面对外公开的做法有关,这会让很多人去研究他们的程式库与3D技术,并以此为基础来制作游戏)。
希望这一类摆架子的行为会在研发方面的技术更为纯熟之后慢慢降低;而且游戏产业的进展将朝向更愿意使用模组,如同电影工业会从外面找寻常用的元件一样。在这个时候,我们已经离这一点有一段距离了,但游戏研发将会越来越复杂。很快的,它在财务上面再也不会容许您重写核心元件,从外面取材将成为必要的方式;这对所有的研发公司而言已经不再是一个选择(只有资金雄厚的公司除外)。即使如此,大型的公司也可能遵循这一套作法,因为成本效益十分明显。
新的公司诞生仍是有可能的,尤其是专门设计让游戏研发者使用的元件,Virtools可能就是其中的一家公司。还有,CyberLife(这是Creatures系列产品的发行公司)也有可能参与这个角色。在撰写本书的同时,他们目前正在研发Gaia,一个人工生命的研发工具,设计用来研发有智慧的虚拟生物,很可能可以在游戏中运用,或是用在其他的应用程式中。
如果结构与设计相反,太过于简单,那出现的问题将会完全不同。一个过度简单的结构在基础上已经碎裂,并需要尽快的加以矫正。如果这个结构无法提供所需的功能,那就没有快速的解决方案。通常都无法靠着把破损的部份修好,然后继续进行那么单纯。一个过度简单的结构甚至不应该通过回顾的阶段!
唯一真正的解答就是重复评估结构,并把次水准的部份挑出来修正。视错误的本质,它可能有必要增加所需要的界面才能继续工作。一个该方面的琐碎范例,就是一个光碟播放模组无法容许一条音轨进乱数存取。这个功能要加上去可能十分简单,而且不需要打破目前使用的任何模组。
不过,如果过度简单的部份太接近基础,象是想要设计一个从平面地图上面抓取资讯,并延伸到3D环境中运用的界面,那么问题就更为困难了。在这个情况下,加上一个简单的额外功能可能还不够。整个模组的结构以及它潜在的资料,将需要修正才能符合新的规格。
当然了,相对的状况就是设计与(或)结构上太过复杂。一个过度复杂的设计在游戏市场上面似乎很常见,但是单纯认为一个游戏设计过度复杂,就是十分主观的事了。
水能载舟、亦能覆舟。《星海争霸》对一般的玩者而言可能太过复杂(那简直象怪物),但是对战争游戏的高手而言,它可能还太过简单。
不同类型的游戏可以接受一定的复杂度,这方面看来象是由全体性的意见所设定。这种复杂度会在每一个同类型的新游戏推出时增加,而且也会有越来越多的研发者赶这个流行。这种现象在近几年变得十分明显,一旦出现一个大卖的游戏类型,其他公司的类似产品马上跟进,而且大部份在设计方面只会更差。我只能假定(而且我有明显的证据)这个设计过程是环绕着一些成功游戏的外型,然后讲一些象是[如果有更多的部队,不是会变得更酷吗?]或是[如果你能更精确的控制这些部队,不就更酷了吗?]
不变的情况是,这些变化并不会让它更酷。有时候加入了太过复杂的东西,游戏就会变成使用者与界面为敌。为什么这些设计师无法了解界面就是要故意做得简单,因为游戏可以在电脑负责一定程度的控制之下,进行的更为流畅。这种点子对玩者而言,不过是种冗长的感受。在《模拟城市2000》中恶名昭彰的输水管供水就是这方面的例子。对那些没有玩过游戏的人而言,这个游戏要您切到下水道的地图,然后安置水管把所有的建筑区连接到供水站去。这个特色受到不少媒体以及网际网路的批评,因为它真的不必要,而且减少游戏中的乐趣。既然供水管是必要的,为什么不让它自动安置?为什么会有人把一块地区的供水管拿掉?这完全没道理(译注:补充一下,在这个游戏中有铺供水管的地区,可以加速繁荣)。
扩展与重新定义一个类型,并不是光靠增加复杂性就可以办到的。如果真的是如此,那么,当即时战争游戏《Warwind》在《魔兽争霸2》之后没多久发行,一定会成为热卖产品。没错,《Warwind》有一些很好的特点,但问题是它容许玩者控制游戏中各单位的种种研发角度,而且在使用者界面上面十分模糊。对一个普通的玩者而言,要掌握的事情实在太多了。媒体在评析中的看法都让人不得不同意。
我个人在玩《魔兽争霸2》的前一天就玩到了《Warwind》但我依然同意媒体的观点。虽然《星海争霸》游戏的运作、使用者界面,以及部队的控制方式仍然与《魔兽争霸2》雷同;这显然是Blizzard Software蓄意造成的结果,而且是好结果。比较一下《魔兽争霸2》与《星海争霸》的销售表,与其他即时策略游戏的成果,都可以支持这个论点。
这并不表示您必须把您的游戏设计弄得过度简单,才能让它容易上手。这只是表示您应该小心的考虑一下您的[酷点子]列表,然后决定您这些点子之所以很酷,究竟是因为它们执行时很好玩,还是它们玩起来很好玩?如果您很客观的做这件事,那您可能很惊?的发现表上没剩几个东西。
您游戏的任何复杂性都需要加以管理。您可以用很多不同的方法来做这件事,象是隐藏在使用者界面下,或是把复杂性降低到可接受的范围内。
最好的一块复杂性是互动式的复杂性,它是靠着简单的规则组合,来产生复杂的结果;象是分子或原子堆在一块,形成水晶一样。这方面的最典型例子就是康威(Conway)的生命游戏(Game of Life)。这部份可能没有介绍的必要,不过对刚刚进入这一行的人而言,我还是简单的说一下。游戏的玩者是在一块平坦的格子中,每一格有八个邻居;格子可能是活的或是死去。游戏的每一回合都代表了一个世代,而每一格的世代都是以下列的规则,源自于上一代:
1.如果一个活着的格子有二个或是三个活着的邻居,这个格子就得以活到下一代(延续)。
2.如果一个死去的格子有三个活着的邻居,它就会活过来(诞生)。
3.活着的格子除了上述的规则以外,都活不到下一代(死亡,表示人数太少或是太多)。
如果您很熟悉这个游戏,那您就知道从这三条简单的规则中,会出现多少复杂的建造方式,象是[shooters]和[trackers]。这就是互动之下产生的复杂性。
在生命游戏中的规则十分简单。不过,从所有可能的过程中进行排列并选择这些规则,是经过深思熟虑的。规则是十分易碎的,任何变更都会导致他们中止运行。有些人尝试将这些规则加以变化(象是生存与否视颜色而定,或是延伸到3D),但这些规则没有一个象原作那么成功。
这边的重点是告诉您,在游戏中表露出没有必要的复杂性,并非什么好事。游戏设计的过程是复杂的,但是游戏设计本身的结果不应该如此。如果这种情况真的出现,那我建议您重写。任何让游戏性复杂的部份,都应该是源自一组简单、持续运作的规则,在互动之下产生。您在把一个本质复杂的系统藏到一个简单的界面之下,要想什么都保留下来是不可能的。在这个地方我会强烈怀疑,[规则基础的复杂性]是否与[游戏中所需的使用者界面]有关;而这一点应该在游戏的设计过程,不断的提醒自己。
一个过度复杂的结构是完全不同的状况,直接导致的结果,就是错误的增加。
一个过度复杂的结构,会产生出不必要而且没有生产力的实行方式。结构是企划的骨架,而程式码就是它的血肉。如果骨架的形状不正,那您培育出来的小孩就会很难看。
如果坚持保留过度复杂的结构,设计者就是在降低整个小组的效率:要达到一个层级中的工作,要花费更多的努力。在这些努力过程中,将会有更多的错误出现,并导致企划在程式码的复杂性上,更难加以维护。这也表示企划中将有更多[知识相关]的东西,而它相当于让任一研发者更难了解全局。
不熟悉或是困难的方法、工具与程式库
使用不熟悉的方法,随后而来的就是额外的训练时间,以及修正第一次尝试这种方法的错误结果。
本书中说明的技术,也需要花一些时间才能适应;您不能期望在您采用了一套全新的程序与技术之后,还能要整个小组马上而且完美无缺的执行它。
当这些方式第一次导入时很可能让生产力下跌25%,这会让人心烦意乱,而且在这些实施后的结果上,很可能会爆发出研发者与管理者之间的惊慌。对于那些反抗这些作法的人而言,这通常会被他们用来做为争吵的主题。研发者最经常做的事,就是对抗那些设计用来追踪他们进度的方法;而游戏研发者似乎对这一点特别感冒,如同他们喜欢保持他们的[自由心灵]与不用负责的心态,而且把[对权威的不尊重]视为心理健全的一部份。
可能有更多不满的研发者从头就开始反抗,所以任何危及生产力的现象,都会被用来当做回到温暖的[老式]制作方法的好理由。这应该极力尽免。
您可以让研发小组为这种事情先做准备,来绕过这一类的反应。对新的方法、工具或是程式库,都有一定时间的学习曲线,这是免不了的,对不熟悉的知识都会如此。不要让多疑的人,在还没有足够长的理解时间之前,把任何新东西都敲倒。您所尝试的每一个东西都不一会有用,但是您从来就不知道,它会不会被一个很难处理的研发者打得混身是血。
举个例子来说,如果产品(或更可能的情况,企划的一部份)是在低级语言)下实施,那么它的生产力将会比预期的更低。不过,一般来说在威力强大的机器上,组合语言的需求程度就越低。一般的主机都已经有足够的能力,让它无英雄用武之地。如果以Pentium级的中央处理器来执行一个多工作业系统,您可能永远无法确定一段特别的程式码,要花多少时间来执行。
唯一可以让组合语言发挥长处的主机,是那些记忆体受限、速度不足,象是任天堂Gameboy或其他掌上型的游乐器。虽然任天堂(以及其他公司)试着限制研发资讯,让只有签约的研发者才能取得,但是地下的研究从来没有断过。甚至已经出现给Gameboy使用的免费C语言编辑器,以及许多可以用来除错的模拟器。
在这些机器上的研发时间,要比成熟的PC与游乐器企划短得多;除了规格受限的原因外,另一个主因在于程式也小得多。Gameboy似乎是唯一可以让单人进行游戏的设计与生产,并与一群大孩子做出来的游戏相较量的平台。
结构整合的问题
在分别进行元件研发的主要危险之一(如同我们在软体工厂模型中所建议的),就是如果这些程序没有在极度小心的情况下进行,在整合时可能会十分困难。如果分别研发的元件无法轻易的整合在一块,那就需要重新设计与修正元件,才能发挥它们的功能。
这个问题并不只影响到游戏产业;它影响的是整个软体工业,也是增加可接受的物件版本技术??象是COM(Component Object Model,元件物件模型)与CORBA(Common Object Request Broker Architecture,共通物件需求中介架构)??的主因。这些在理论上,是用来进行游戏研发的好模型,除非您的目标是跨足多平台的游戏。
在PC的研发方面,COM是很值得考虑采用的。您不用担心它在效率上有不当的表现,因为整个DirectX程式库就是以COM系统为基础。虽然这部份在本书第三部有更进一步的说明,不过COM可以遵照研发者的要求来进行物件改写,以保证一个物件界面的作用仍然保持原状。所有的物件在执行时都必须找齐,而且是透过标准功能,以保证在界面上每个物品的号码都是独一无二的。如果界面需要加以更新,那就会指派一个新的界面编号,而且如它的重要性一样,老的界面仍然不会有所更动。这可以更新一台机器上面的共享元件,而不用打碎用在早期版本上的界面。COM当然不是一个万灵丹,但是它可以解决一些整合元件上最常见的问题。
目前COM只能在视窗为主的作业系统上运作,但是微软已经保证会把COM带入其他的平台。先不管谈论独占主义的趋势,COM很可能在未来成为产业界的标准,而且甚至适合进行跨平台的研发工人和。
行程表的协迫
行程表的协迫是很令人厌恶而且通常是最诡诈的威协,也是最难去侦测与控制的问题。
通常,只要有机会,研发者会把他们延误的行程表藏起来免得丢脸。就算是要一个经验丰富或是很有责任感的研发者,承认他(或她)落后进度也是很困难的。就算这不是研发者直接造成的错误,也无助于改善这个现象,因为他(或她)通常都要为这个延缓的时程表负责。
行程表的延误并不一定是研发者的错。这个责任的连锁会一路延着命令的阶层向上跑,而且谴责可能会落在这个阶层的任何地方。下列的章节将会提出一些延误的例子,指出原因,并如何修正。主要问题是,延误有时是难以注意的。当所有东西都比期限慢了一点点,然后某一天全部加总起来,就会突然变成时程表延误了数星期,甚至是数个月。
过紧的时程表
由于财务与商业上面的束缚,大部份的时程表都是很紧密的。给一个小组太多而且没有必要的时间,可能会让您到达您想要的完美境界;就算是有足够的财源让一个小组可以放声说:[它在准备好之后就会发行],一个严密的控制还是有其必要,来确保时间不会白白浪费掉。
期限并无法提供集中力。一个员工在得知他得在一定的时间之中,达成短期的目标并无法让他更为专注。不幸的是,在很多的理由之下有时是一种压榨,尤其是管理者采取极端措施,决定要把时程表变得紧到想勒死人,藉以刺激那些[懒惰]的研发者开始行动的情况下。这种方式一向都有负面效果,研发者很聪明,如果不够聪明,他们就不会在这边。
从一开始就排得过紧的时程表,有好几个理由。有时候,时程表可能是因为外表的理由而修正完工时间,象圣诞节就是一个常见的理由。我知道这应该是一个充满希望的神奇节日,但是就算如此,在年初就诞生数个完全没有希望的乐天派时程表,试着在圣诞节大卖仍然让我高兴不起来。
对于一个修改过的时程表,唯一解决方式就是减少产品的规格,增加可用的资源,或是增加可用的时间。这三个属性(需求、资源与时间)都是在平衡的状况下。您在变更其中一个时无法不影响其他二个。
这三个属性可以视为三角形的三个点;与图14.4所示十分类似。如果您打算让这个三角形与中心点保持平衡,那很明显您不能变更光靠改变一个角的[权重],而不去变更其他二个角。为了保持三角形不致于崩毁,您必须让重心保持在中心点。所以,如果您的时程表变短,您可以增加资源或是简化规格;如果您减少了资源,规则就必须切掉一些,否则时程表就要拉长,依此类推。
这是一个不变的定律,没有什么其他替代方式。如果管理者不喜欢这个结果,那就是一场硬仗,一定要给一些东西;否则光是叫员工长时间工作,来达成不可能的时程表只会招致反效果。他们不只会蜡?二头煤,而且也对士气有负面的影响。他们可能离开公司,而结果就是挑战管理者的责任,一样会造成大量的金钱流失。
另一个原因是采用[有可能]的时程表。这部份在本章前文已经提示过(见案例研究14.1)而且产生出来的时程表很不精确,除非一切都是处于最佳状况的[完全状况],但事实上的结果是[预期状况]中的时程表。
这些[有可能]的时程表通常在二种理由之下发生。第一种是遵循时程表的员工没有经验。在这种状况下,他(或她)通常都尝试做出一个管理部门很想看到的程式表,以博取较好的印象。这个时程表的设计都是假定研发过程一切都在没有问题的情况下。第二种更糟,就是[有可能]时程表出现的原因,在于管理者倍受压力下要求砍掉时刻表后段,最后就是一个[不可能]的时程表。
这种事不会有人喜欢,而且它通常导致研发小组在时程表延误上倍受责难。要解决这种问题没有简单的方法,唯一的方式就是在有效率的现实考量中,要负责人第一次就把真实的时程表做出来;然后在管理部门要求减少时间的时候坚定立场。这通常是假定所有研发者反正都会在时程表中灌水,所以他们可以切掉一些灌水的部份然后做出[真正]的时程表。这种让人迷惑的争论必须不计一切代价的加以反抗,您不可能光是削掉一部份的时程,然后期待制作时间加快,来完成等量的工作。这边一定要争取到一些东西,而且这些东西不是要能与企划相符,要不就是指派更多的资源。
当我被人要求减少不合理的时程表时,我试着让他人从我的角度来看事情。他们可以快点拿到东西,但是这会让他们花更多的钱与较少的功能,而且伴随而来的是更高的风险。这暗示着更多的金钱、减少的功能以及增加风险,可以让他们马上集中精神,最后通常可以达成其他方面的妥协。
不完整的时程表
在排定时程表的人经验不足时,另一个可能出现的问题就是他们会省略掉时程表的一部份。或许他们会忘掉的有的图档需要进一步的处理,也可能忘掉游戏需要有安装与解除安装的程序。不过,要预测二年时间中的工作列表,也不是一件简单的事。
事实是,如果一个工作没有出现在工作列表中,它就不会排入时程。这个结果就是让一个不完整的企划成为恶梦般的局面,因为照时程表来看,它应该完工了才对!唯一的解决方案就是埋头苦干把工作完成,让时程表过头,为额外的工作取得额外的资源;或是降低企划的标准。这将会视他们的花费与劣势来决定,如同我先前说明的一样。
缺乏的资源
如果时程表的安排是以特定的组员为基础,而且这些组员无法运作,那就是一个大问题了。
如果特定的组员拥有所需的技能,而且他(或她)正在忙其他东西,那除了等候以外并没有其他的选择。不过,更重要的一点是,这种情况根本就不应该发生。让一个人独占一种特定的技能是极度危险的事情,万一他(或她)决定要离职呢?您应该做的是鼓励技能在您的员工之间传递,全面预防碰上这种局面。
记住,一个企划在理论上都有最少量的需求。如果您变更了任何一点,那么另一点或是另外二点都需要以相反的方式进行修正。这也是一个不变的道理,所以尝试去违反它并没有什么意义。这样做只是导致另一个问题,例如研发者力竭、企划延期或是取消、甚至是一个次水准的产品。
==============未完 ! 请继续看下去!=======================
[em17] [em17] [em17] |
|