
之前提到要写一篇关于脚本语言技术的文章,我也确实认真的写了,只是完成以后我看到,这篇文章实
在是很“”了一些。且不说读者是否还能理解游戏脚本语言有哪些,单就创意而言,这篇文章只是索然无味。
我想,其实脚本语言只是游戏研发中的专有技术,而是普遍应用于各种工具项目的一种技术。如果单独
介绍这些技术,未免会摆脱与游戏相关的话题。所以我决定重新立题,以专门介绍脚本语言在游戏开发
中所起至的作用为立意,重写这篇文章。于是,便有了下面这篇拙文。还望你们多多指正。
作为引擎科技中的一项分支技术,脚本语言是一个非常重要的模块。那么,这种科技针对游戏业的发展
起到了哪些影响?请耐下新来听我渐渐讲述这个过程。
我想大家都明白,早期的游戏制作人、监制、或者说的时髦些叫做导演也好,至少是半个程序员,而且
往往还是懂得“汇编语言”这种“甲骨文”的那个。因为那时候的开发工具和环境都非常简陋,如果一
个制作人想要实现自己设想,最直接的方法就是自己把代码写下来!但,假使这位制作人(比如宫本茂
先生)对于编程一窍不通,那么他只好尽可能地跟负责程序编写工作的上司进行交谈,让程序员通过代
码将制作人的看法叙述出来。固然,程序员可能难以很好地理解制作人的动机,最初编写的游戏运行结
果可能跟制作人的表述有所区别。不过这并不是什么大问题,制作人可以进一步跟程序员进行沟通,对
程序进行更改。如果这些沟通工作做得足够好的话,毫无疑问,制作人的企图最终会准确地表现在游戏

中。
至少在PS之前,制作人和程序员都在以这种的方法良好地合作着。然后,SS和PS来了,3D来了,大容量
CD来了,空前复杂的游戏逻辑来了,然后,问题随之而来了。
我们可以想象一下,问题最早是在这么的一种情形下爆发的:
某天晚上,我们制作人愉快地来到了程序员的办公桌旁,像以往一样问道:“程序君,请你修改一下勇
者手中宝剑的作用,我希望当这把宝剑砍中敌人的之后,会使敌人造成中毒的效果。”
程序员:“咕~~,事实上这或许要花些时间,你或许应等上3个小时后才会发现结果。”
制作人:“什么!3个小时!!我也是改动一把宝剑的用处就要花上3个小时!!!可是今天你把宝剑的
攻击力从15改为34的之后只花了几分钟而已啊。”
程序员:“是的,那并非削弱一个数值而已,我只应该修改一下数据文件而已。但是,‘产生中毒效果
’是一个‘逻辑事件’,如果我应设置该‘逻辑事件’的话,就需要再次编译程序,这个编译过程或许
要花费3个小时。”
制作人:“为什么?为什么修改该数据不需要重新编译,而更改该逻辑事件’却应再次编译?”
程序员:“这个难题很难用一两句话解释明白。”(出于相同的缘由,我也不准备向大家解释这个问题

,否则这篇文章往往会成为一篇超过5万字的技术论文。)
制作人:“但也不至于要3个小时吧,之前开发SFC项目的之后,你每天不是只花了十几分钟就编译好了
么?”
程序员:“这个问题也很难用一两句话解释明白。”(同上)
制作人:“哦,天啊,如果改动一点点逻辑都要如此长时间的话,我们如何调试游戏呢!!!”
事实上,以上的场景是一个十分极端的事例,但凡一个合格的制作公司,都不可能到了PS时代还在延续
SFC时代的开发方法。但,这个事例确实体现当年游戏开发中的一个普遍问题:由于游戏越来越复杂,编
译一个游戏所要花费的时间也就越来越长。由于当年技术的落后,程序员往往会把游戏中的“逻辑事件
”直接写在代码中。这样一来,当“逻辑事件”改变时,代码就需要改写,而改写后的代码就需要再次
编译。如此一来,每一次改动“逻辑事件”都意味着漫长的编译过程。
诸位玩过“暗黑破坏神”的玩家可以想象一下,暗黑中的装备平衡性都经过了漫长的检测和调试。如果
暗黑采用的是之前的事例描述的方法来开发的话,那么上百件武器的每一次调整都要经历艰难的编译过
程,这是如此可怕的事情......
而脚本语言就是为了解决这个难题而被采用到游戏研发科技中来的,关于脚本语言的实现原理,我不在

这里做具体的表明。各位只要明白,有了脚本语言后来,游戏中的逻辑事件可以成为一种资源被加载。
简单地说,“会使敌人造成中毒的效果”这个事件不再是写在游戏的代码中,而是写在一个独立的文件
中。当游戏中的勇者使用宝剑的之后,游戏的核心程序中的“脚本语言解释器”会去调用这把宝剑所对
应的事件文件,如果事件文件中写着“会使敌人造成中毒的效果”,那么宝剑就会获得“会使敌人造成
中毒的效果”的能力。而即使制作人突发奇想,想要这把宝剑才能让对手被传送到某地,那么程序员只
要将这个文件中的内容改为“能够让对手被传送至某地”即可,而不用重新编译整个程序。这一功能极
大地方便了游戏的调试和研发,可以想象如果没有这种技术,复杂的游戏几乎没有被开发起来的可能性
。(这里我要表明一下,虽然我之前以暗黑为例,但暗黑采用的不是脚本语言技术,实际上解决一个问
题有很多种方法,脚本语言也只是适用于所用情况的“万用技术”。)
说道这里,如果你是一个思维敏捷的人,应该会很容易想到,其实不仅仅宝剑的属性,游戏中的所有逻
辑都可以用脚本来表述。那么当所有的逻辑都被以脚本来表述的之后,游戏程序中剩余的核心代码还剩
下些什么呢?应该只有绘图,声音播放,输入输出等功能了,当然,一定还包含一个用于解析这种脚本
语言的模块。如此一来,剩下的这种核心代码不就正是一个“引擎”了么!于是,很自然地,引擎技术
将脚本语言成为一个子模块引入了过来了。有了这一科技,引擎更是如虎添翼。如果抽象地解释这一作

用,大家或许很难理解。大家可以回忆一下CS,这个游戏是有两个高中生在暑假完成的。两个高中生为
什么才能在这么短短的时间内使用原本第一流的3D引擎完成一个如此复杂且有有趣的游戏呢。原因就在
于CS所使用的HL引擎采用了一套非常规范的脚本语言。有了脚本语言后来。这两位高中生不再要考虑如
何合理地调用引擎中的各类接口,而即使用脚本语言表述自己所要制作的游戏中所包括的规则即可。HL
引擎中的类库语言解释器会读取这种规则,并向引擎的核心层解释这种逻辑。核心层按照游戏逻辑去自
动处理复杂的底层操作。
之前的一篇文章中讲到,引擎屏蔽了软件层跟一些更底层的复杂操作,而脚本语言进一步屏蔽了引擎的
最底层的复杂操作。于是,现在的游戏开发者只要描述游戏的规则就能,而且鉴于脚本语言远比传统语
言简单,所以唯有一点程序基础的人,都可以用脚本语言编写出复杂的游戏来。这不但因而传统游戏开
发行业大大受益,也是的长期的独立制作人得以蓬勃发展。可以说,没有脚本语言,就没有今天种类如
此丰富数量极其之多的游戏。
最后想说一点,和所有的技术一样,脚本语言也有特点,最显著的一点就是,使用脚本语言大的游戏游戏脚本语言有哪些,运行效率相对较低。因为脚本
语言解释器会消耗大量的平台。虽然,这些消耗对于PS3或360级别的主机也是九牛一毛,但是针对NDS等
掌机或移动系统来说还是不小的。不过这即将不再本文讨论范围之内。谈到这种也并非想使你们了解到
,现在针对游戏的改进终于不可能像FC时代这样1k内存那样的完胜了。事实上,有时候为了游戏的整体
效果跟开发的便捷性,必须牺牲一部分性能。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-143300-1.html
而且进12海里了