泓泰

当年星际争霸1的寻路系统为何做得如此粗糙?

admin
当年星际争霸1的寻路系统为何做得如此粗糙?-第1张-游戏相关-泓泰

咱们新一期【qī】的《星【xīng】际争霸十万个为什么【me】》又【yòu】和大家见【jiàn】面【miàn】啦【lā】!停更了好多【duō】天,今天就来和大家说【shuō】点不为人知的游戏【xì】中星际争霸的硬核【hé】知识哈【hā】哈。

大家在【zài】玩星际争霸1的时候一定有【yǒu】这么一种【zhǒng】感【gǎn】觉,游【yóu】戏中单位的AI为何会如此低【dī】效,总是【shì】时不时的会在原【yuán】地发【fā】呆,或者被【bèi】卡在一个地方来回【huí】摩擦。如果玩过魔兽争霸3或者星【xīng】际2的话就【jiù】会【huì】对星【xīng】际1那粗糙的单位寻路系【xì】统更加嗤之【zhī】以鼻,那么【me】是什么样的原因导【dǎo】致【zhì】了星际1的【de】寻路系统如此糟糕呢?大麦在外【wài】网【wǎng】挖【wā】掘出【chū】了曾经星际【jì】1的首【shǒu】席程序员【yuán】 Patrick Wyatt的回忆录【lù】,讲述了【le】当年【nián】星际1在开【kāi】发过程【chéng】中的趣事,今【jīn】天就来和大家讲讲吧~

Patrick Wyatt

不合适的游戏引擎

当时【shí】星际【jì】争霸在立项的时候仅仅【jǐn】是定位为【wéi】一【yī】个中小【xiǎo】型的RTS游戏,说【shuō】白了其【qí】本质【zhì】玩法就和魔兽争霸1、2基本一样。因此暴雪的员工们就【jiù】决定继续【xù】使用魔兽争霸2的游戏引擎来开发【fā】星【xīng】际争霸。

然而没想【xiǎng】到的是【shì】,由于【yú】暗黑破坏神的成功【gōng】令【lìng】暴雪公司的规【guī】模快速扩张,因此高层【céng】临时决定扩大【dà】星际争霸的开发规【guī】模,为游【yóu】戏增【zēng】添更【gèng】多的新【xīn】元【yuán】素,并【bìng】且还要将游戏视角改成当时最流行的等角投影视【shì】角。

可能有【yǒu】玩家不太清楚什么是等角【jiǎo】投【tóu】影视角,我【wǒ】举个例子大【dà】家【jiā】就能【néng】了解,比【bǐ】如暗黑破坏神、奇迹、传【chuán】奇、这种游戏的视角就是等角投影视角,也就【jiù】是我们国内玩家【jiā】俗称的【de】2.5D视角。

但【dàn】当时星际【jì】争霸所使用的是【shì】魔【mó】兽争霸2的游【yóu】戏引擎,这里我还得需【xū】要先和【hé】大家说一下魔【mó】兽争【zhēng】霸2的游戏引擎是如何绘制和优化地图的【de】。魔兽争霸2是【shì】一种【zhǒng】俯【fǔ】视视角的游戏【xì】,游戏引擎会将【jiāng】整个地图分【fèn】成均匀密布的32*32像【xiàng】素的小方【fāng】块【kuài】,然后【hòu】这些小方块又会被【bèi】分成16个8*8像素的更小【xiǎo】的方块。

读图的时候,把地图分【fèn】成若干个【gè】相【xiàng】对较【jiào】小的区域(平均每个区域大概10×10个32×32的图块【kuài】大),这些区域互【hù】相挨着,而且内部没有大【dà】个的障碍物。区域内部的寻路【lù】可以用【yòng】A*算法来【lái】搞定,撞到障【zhàng】碍的几率【lǜ】很【hěn】小。同时在读图时系统还【hái】会创【chuàng】建一个高层的【de】地图用来【lái】储存【cún】区域【yù】间的【de】邻接关系。区域是【shì】不规则形状的【de】,所以这个高层地图相当于一个【gè】节点图,而【ér】不是图块地【dì】图【tú】。区域【yù】间的寻路,在高层地图【tú】上用A*算法实现。当单位移动【dòng】时,对它们占领的【de】小方块进行【háng】标记【jì】,然后用一大堆特【tè】殊逻辑,包括各种极【jí】端情况【kuàng】、单位行为、敌【dí】军【jun1】vs友军【jun1】,来遍历这【zhè】些被占的小方【fāng】块,这些特【tè】殊逻辑还【hái】包括一个状态机,大概有40个不同状【zhuàng】态。

如果不太理【lǐ】解的话可【kě】以【yǐ】看看下图,就知【zhī】道将地图【tú】分解【jiě】为图块是怎么回事了。

后来星际争霸改成了【le】等角【jiǎo】投【tóu】影本【běn】来应【yīng】该【gāi】用菱形的图块来绘制地【dì】图会更为方【fāng】便,但是由【yóu】于星【xīng】际1在开发时【shí】使用【yòng】的是魔兽2的游戏引擎,再加上【shàng】发售日期将近,于是程序员们就只是改了游戏的外【wài】观却没有修【xiū】改底层【céng】架构,这才导【dǎo】致了后来的寻【xún】路问【wèn】题接踵而至。

混乱的底层架构

首先【xiān】为了【le】保证寻路功【gōng】能的正常运行,因此地【dì】图的分辨率就必须得【dé】增【zēng】加【jiā】,原来只是32*32像素的格子来标记单位是否能通过,现在这些格子【zǐ】中每一个【gè】8*8像【xiàng】素的小格子都要来进行判【pàn】定【dìng】标记。这样系统的运算量就需要【yào】足足提升16倍,对于【yú】电脑的【de】硬件是【shì】个不小【xiǎo】的考验,因此【cǐ】当【dāng】时星【xīng】际1刚【gāng】出的时【shí】候对于电脑【nǎo】配置的【de】要求算是【shì】比较高的!

配置要【yào】求提高【gāo】还是一【yī】方面,另一个主【zhǔ】要【yào】问题就是游戏中斜向的地图和碍口【kǒu】是个巨大的麻烦,因为【wéi】斜着【zhe】的【de】边缘将正【zhèng】方形小格子给切【qiē】割得【dé】乱七八【bā】糟,系统需要判定这些小格子哪些【xiē】能走哪些【xiē】不能【néng】走,而这些工【gōng】作全都得交给程序员来进行,也因此【cǐ】星际争霸【bà】1的【de】地图【tú】编辑【jí】器极其难写,用户【hù】也极难使用。

因此大家一定【dìng】发现了【le】,星际1的【de】第【dì】三方【fāng】地图数量稀少,而【ér】且bug非【fēi】常多。反观魔兽争霸3他强大的地图编辑器诞生了非常多经典的游戏【xì】,比如【rú】dota,澄海3c这【zhè】些超级经典的RPG地图。

所以玩家在玩游戏的时候【hòu】有时候会发现,如果是一队龙骑士在通过一些比【bǐ】较狭【xiá】小的路【lù】口时就【jiù】会【huì】发生超【chāo】级大堵车。你在前【qián】线正打得火热【rè】呢,回过头来【lái】可【kě】能就【jiù】会突然【rán】发现七八个【gè】龙骑【qí】士正堵在【zài】一个路口下不来,所【suǒ】以这时候就需要玩家手动去一个一【yī】个操作【zuò】这【zhè】些龙骑士让他们按【àn】顺序【xù】走下来。

除了【le】这【zhè】些问【wèn】题以外还有一个东【dōng】西一直困扰了【le】暴雪【xuě】的程序员【yuán】们【men】好【hǎo】久,就是农民【mín】采矿时【shí】的拥堵。星际中【zhōng】每一个【gè】单【dān】位都是【shì】有碰撞体积的,当十几个农【nóng】民在一起采矿时【shí】就难免会发生碰撞【zhuàng】,然后慢慢的就会【huì】挤【jǐ】成一团【tuán】动弹不【bú】得。这个问题【tí】直到游戏发售都没有被解决,最终还是用了简单粗暴【bào】的方式取消【xiāo】农民在采矿时的碰撞【zhuàng】体积,才终于能让采【cǎi】矿工作平稳运行。

有【yǒu】趣的是,我【wǒ】们现在了【le】解到的星际【jì】争【zhēng】霸中的这些程【chéng】序BUG却【què】成为了星际争霸这款游戏中的【de】闪光点。比如这些智障【zhàng】的寻路功能却成【chéng】为了区分高【gāo】手和普通玩家【jiā】的分【fèn】水岭,还有那单位硕大无比的【de】碰撞体积,却增加了单位【wèi】的【de】战场存活时间,提高了【le】游戏【xì】的观赏性。

所以说后来一直有人认为星际【jì】争霸1的观赏性和游戏【xì】性要远【yuǎn】高于星际争霸【bà】2,这【zhè】其中的主要原因还是在于,星际1的操作几【jǐ】乎没有【yǒu】上限【xiàn】,操作实【shí】力【lì】强的选手就是可以碾压【yā】操作比他弱【ruò】的【de】人【rén】。但【dàn】到【dào】了星际【jì】2,由于采用了动态【tài】寻路的方式,使得游戏【xì】中【zhōng】的单位【wèi】经常容【róng】易【yì】出现聚团的现象,往往一个AOE打中了,这场游戏就已经宣告结束。

因此我们会发现,在观赏星【xīng】际2的职业比赛时【shí】,往往双方部队一碰,10秒内就【jiù】能决【jué】出胜负,给观【guān】众的观赏【shǎng】体验【yàn】并【bìng】不是很【hěn】好。而星际【jì】1中【zhōng】一场战斗可【kě】能会发生数【shù】分钟的拉扯,战斗,在拉【lā】扯的局势,其激烈程度要【yào】远胜星际2。

不过呢,毕竟时代【dài】是在进步的,星际2相【xiàng】对来说对【duì】于绝大多数玩家【jiā】更为友【yǒu】好【hǎo】,他也首次出现【xiàn】了无上限编队的系【xì】统,还有各【gè】种人性化【huà】以【yǐ】及更加智能的AI的确【què】是当之【zhī】无愧21世【shì】纪最好的RTS游戏。

好啦,今天的故事就说到这【zhè】了,如果【guǒ】喜欢大麦【mài】的【de】星际小故事的【de】话可以点一【yī】波关注点【diǎn】个赞哟~

标签: #星际争霸地图编辑器中文版