本文最初发表于《游戏创造》(http://www.chinagcn.com)2007年8月刊。版权所有,侵权必究。如蒙转载,必须保留本声明,和作者署名;不得用于商业用途,必须保证全文完整。
网络版首次发表于恋花蝶的博客(http://blog.csdn.net/lanphaday),与杂志版本稍有不同,略作删改。

id="alimamaifrm" style="WIDTH: 750px; HEIGHT: 110px" border="0" name="alimamaifrm" marginwidth="0" marginheight="0" src="http://p.alimama.com/cpacode.php?t=A&pid=mm_10108440_0_0&w=750&h=110&rn=1&cn=3&ky=&cid=251602&bgc=FFFFFF&bdc=E6E6E6&tc=0000FF&dc=000000" scrolling="no" frameborder="0" height="110" width="750">

游戏中的脚本语言
网易广州       赖勇浩
http://blog.csdn.net/lanphaday
游戏业中的脚本
脚本不是游戏业的新技术,但脚本为业外的人所知悉,却应归功于《魔兽世界》(以下简称Wow)在世界范围的流行。通过Wow伟大的自定义界面系统,Lua这一脚本语言一举成名天下知。
虽然Lua的出名有点横空出世的感觉,但游戏业内早就使用脚本来开发游戏了。即便是在国内,我们所熟悉的网游大多数是用脚本开发的。此前已有人士透露,网游的长青树《梦幻西游》和《大话西游2》就大量应用了脚本技术;特别是《大话西游2》,比Wow早几年做了基于Lua脚本的游戏开发。可以说,国内与国外在脚本技术上并不存在差距,大家都是站在同一起跑线上的,这为国内游戏行业赶超国际水平提供了强大的保障。
回顾过去,我们发现单机版游戏时代很少听到脚本这个词。那么,为什么在网游时代脚本成了业界宠儿?原因是多方面的。比如在单机时代,无论游戏机还是PC的性能都非常低下,需要具有更高执行效率的编译型语言来“压榨”机器性能。但硬件性能的提升并不是脚本流行开来的决定性因素,真正的原因是市场的需要。
网游时代的市场需求快速变化、竞争激烈,如果延用单机时代一年半载才出一个新版本的开发方式,那必然会被市场淘汰。正是这种快速变幻的市场需要和低效的开发工具之间的矛盾,引发了开发工具的革命——脚本语言风生水起。脚本的兴起因为游戏业中传统的编译型语言(asm/C/C++)的性能优势在硬件性能大幅攀升的今天已经不复存在。在网游时代,游戏业中的主要矛盾已经由性能低下的硬件与游戏执行效率之间的矛盾转变为快速变化的市场需要与低效的开发工具之间的矛盾,脚本在网游时代的辉煌是历史的必然。
除了市场和硬件因素外,还有一点不能忽略。那就是C/C++进行游戏开发的高成本性和高项目风险。随着java/.net逐年流行,大学生中学习C/C++编程语言的人越来越少。物以希为贵,人亦如是。C/C++程序员新鲜血液补给少,而网游开始流行,巨大的网游市场需求造成大量的人才空缺,这时也就带来了C/C++的高成本。即便是资本雄厚的公司,可以雇佣大量C/C++程序员开发游戏,也不能无视C/C++高级特性和高度的灵活性带来的高项目风险。C/C++是易学难精的编程语言,应用在大型项目的时候极容易因为程序员的水平参差不齐而引起沟通不畅,还有滥用的高级特性也容易引入大量的bug。游戏公司希望找到一个方案以解决高成本、高风险的问题——这个方案就是在游戏中使用脚本。
脚本的现状
脚本解决了C/C++无法解决的开发效率难题,而且降低了成本和风险。脚本在游戏业中就此蓬勃地发展了起来,现在脚本技术已经成为游戏业中不可或缺的一环。横看当前脚本技术,一片大好形势就如同八九点钟的太阳。不仅语言百家争鸣,而且书籍也层出不穷;不仅在游戏业开花结果,在web等其它应用也大放异彩。
首先,我们来看看现在比较流行的脚本: Python、Lua、ruby和Erlang。Python和Lua是网络游戏开发的中坚力量;ruby凭借ruby on rails的web开发框架的强劲力量,不可小瞧它在游戏业的前途;erlang在高并发性上的原生优势吸引了无数追求高性能的网游服务器的开发人员的目光。
然后让我们来看看书籍和资料方面。大家都知道,文档对语言的普及起到正向催化剂的作用,甚至可以看作是语言的有机组成部分,必不可少。Python经过基金会的多年经营和在NASA、Google得到重用的原因,书籍方面比较丰富;ruby随着RoR的流行水涨船高,这两年行情看好,书籍也出版得越来越多了;反观Lua,虽然流行度一直走高,但出来的书却没有几本,跟他苦涩的接口设计和缺乏针对大型应用的原生支持不无关系;Erlang是典型的少众语言,但随着多核时代的来临和高并发网络应用的需求,有着光明的发展前景,现在《Programming Erlang》等书已经在策划出版了。
最后把焦点重新聚集到游戏开发行业中来,可以发现脚本言语已经在游戏业中开发结果,硕果累累。除了前文提到的《魔兽世界》和网易经典“西游系列”都使用了脚本外,现在大多数流行程序都使用脚本,如腾讯的《QQgame》和搜狐的《天龙八部》等。现在的游戏引擎也都提供了脚本接口,无论是商业的Unreal引擎还是开源的OGRE,无一例外。
脚本的优势
脚本在游戏业中找到自己的一席之地,是因为网游市场需要一个快速开发方案来避免C/C++开发带来的项目高成本和高风险。那么,具体而言脚本相对于C/C++这类编译型语言有什么优势呢?
一、易于学习、代码可维护性强。通常脚本的语法都非常简单,也没有太多高阶的特性,学习的门槛较C/C++低得多。如Python号称只需要花一个下午即可学会。这使得游戏开发公司可以招聘完全没有脚本编程经验的新手,通过低成本的培训,迅速走上工作岗位。除易于学习外,脚本代码也有更好的可维护性(尽管写出没有人看得懂的Lua代码也非难事)。因为脚本不会有很多高阶特性(如C++里的模板元编程就是高阶特性),所以脚本程序员有更多精力关注架构、模式、重用和测试,从而提高了代码的质量;相应地,没有那么多让人困惑的高阶特性,也使得代码“简洁”不少。
二、降低开发成本。如第一点所言,脚本易于学习,使得游戏开发公司可以大量应用新手,是降低成本的有效手段。那么如何来保证新手写的代码的质量呢?这需要我们辩证地看问题。从经验上看新手写的程序无论用什么言语,bug肯定不少。但一个C新手编写的代码和Python新手编写的相同功能的代码相比,C版本应该会有更多的bug。由于C程序需要编译,而脚本程序(大部分)都可以直接解释执行,所以在排除bug方面脚本也有先天的优势,这使得脚本在低成本的同时能够更好地保证代码质量。
三、形成人才壁垒。软件开发行业是一个动荡的行业,无数的程序员都在跳槽和谋划跳槽的状态中过日子。使用脚本开发,形成人才壁垒是游戏业减少人才流动的有效手段。因为脚本现在除了在游戏业中大红大紫外,并没有在其它行业形成杀手级应用(虽然在web开发方面也有燎原之势,但终究不似在游戏业中的地位高尚)。这就让游戏程序员很少会考虑非游戏业的职位,而其它行业的程序员却可能会因为脚本的易学习性转投游戏业。脚本除了能有效形成行业间的人才壁垒外,也能有效地形成企业间的人才壁垒。因为现有的脚本种类繁多,不同公司往往有不同的选择,甚至有些公司使用自己开发的脚本语言。程序员从公司A跳槽到公司B可能就要学习使用另一种脚本,这提高了跳槽的成本,从而使人才流动减少。
脚本的发展趋势
依照目前的趋势来看,脚本语言也一定会更加普及开来,而且会渗透到其它行业中去。随着网游从业人员的增长,脚本程序员也一直相应地增长着,而且Web2.0热潮引起的网络需求,也促生了一批批新的脚本程序员。网游市场就像一个正在滚动的雪球,带动着脚本的普及。
随着脚本在游戏业中越来越流行,市场就会需要更高的生产效率。脚本虽然一定程度上缓解了市场与生产工具之间的矛盾,但仍然不够彻底。由于市场竞争趋于激烈,而网游在很多功能实现都相差无几:如网络、数据库、图形甚至部分逻辑。这必然会催生网游生产组装化——大量的中间件相互组合形成新的网游。从现在来看,Bigworld、PhysX和Unreal等都是比较流行的网游中间件。脚本语言是粘合各个中间件的良好胶水语言,所以随着网游生产组装化,脚本有良好的发展空间。
那么,当脚本发展到如日中天的时候,会取代C/C++这些编译型语言吗?我认为不会。脚本语言和编译型语言在生产效率和执行效率上各擅胜场,网络游戏既需要能快速应变的脚本,也需要能快速执行以提供更绚丽游戏效果的编译型语言,在未来,它们之间会保持长久的和谐互补关系,相辅相成。
结语
综上所述,网游时代是上帝赐予脚本语言的绝好时机,脚本语言很快将迎来自己光芒四射的世代。脚本语言拥有编译型语言无可比拟的生产效率优势,它们将并肩奋战在游戏最前线。
作者简介:
赖勇浩,现供职于网易广州。现致力于游戏人工智能和高效Python开发的研究,喜在博客(http://blog.csdn.net/lanphaday)上分享心得。邮箱:lanphaday@126.com。

游戏开发中的脚本语言相关推荐

  1. 游戏开发中的多语言文本管理

    好久没写博客了,今天趁着还在排魔兽副本的功夫上来写一篇! 由于之前没有经验,这个项目在做的时候,在多语言文本管理这方面做得很差,到了后期字符串基本成了一个无法管理的状态,随便要改点什么字都需要在一个存 ...

  2. 游戏开发中的多语言处理

    前言 之前我写过一遍<数据表的使用>的文章,今天继续用文本处理为例讲解一下数据表导出工具的使用和多语言的使用方式. 编写数据表 我们先定义一个UI文本表,写好表头,添加几个测试用对本文,注 ...

  3. Unity 3D - 游戏开发中的Lua

    Unity 3D - 游戏开发中的Lua : 本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/39826323 前言 : ...

  4. 游戏中的脚本语言原理与发展

    作者:陈嘉栋(慕容小匹夫)     源地址:http://www.cnblogs.com/murongxiaopifu/p/4557365.html 从游戏脚本语言说起,剖析Mono所搭建的脚本基础 ...

  5. Python脚本解决在游戏开发中的困难

    Python脚本解决在游戏开发中的困难 新客网 XKER.COM 时间:2010-03-11  点击: 次 Python脚本是一种广泛应用于玩游戏开发的通信语言,在实际应用的过程中还是有不少的问题困扰 ...

  6. 游戏开发- Python语言在游戏开发中的潜力

    PYTHON 是一种面向对象的通用高级编程语言,由 GUIDO VAN ROSSUM 于 1991 年开发.自发展以来,PYTHON 已成为世界上最流行的编程语言之一.它经常在流行度调查中排名靠前-- ...

  7. VR硬件演进与其游戏开发中的若干注意事项

    最近两年虚拟现实(Virtual Reality,简称VR)从刚刚走进公众视野到逐渐变得炙手可热,很多不同领域的IT开发者都想进入虚拟现实领域.本篇文章将首先讲解VR入门所需要学习的知识,然后从VR软 ...

  8. Unity3D研究院之游戏开发中的人工智能AI

        很久没有写Unity3D相关的东西了,是因为这段时间我深陷一款IOS的软件开发中.不过以后我还是会回归Unity3D游戏开发的.什么语言都在用,生活与工作都挺给力的嚯嚯.今天还是打开了久违的U ...

  9. 反射在游戏开发中的应用

    文/宋忆疆 上一期专栏, 我曾提到. N E T提供了一个特性叫做反射(Reflection),其实反射并不是.NET所独有的.在这一期专栏,我想和大家讨论一下反射这个特性,在游戏开发中的应用,以及发 ...

  10. 机器学习将在游戏开发中的6种应用

    机器学习正在改变几乎每个行业,从农业中的作物规划到医疗保健中的癌症诊断.这些主题通常会得到更广泛的讨论,因为它们已经产生了切实的,对人类有益的影响.对于游戏行业而言,不幸的是,游戏开发中的机器学习仍处 ...

最新文章

  1. ROS 用 roboware实现节点信息发送和接收
  2. package org.springframework.stereotype包不存在
  3. 给定key值,在Binary Search Tree中查找最接近该键值的结点集合
  4. 相似图片搜索的原理(转)
  5. centos7开放端口访问不了_基于TiUP cluster 在centos7系统上模拟生产环境部署TiDB数据库...
  6. SpringBoot中的响应式web应用
  7. 不知道用什么图表展示数据?看这份图表选择指南就够了
  8. button3 电脑上mouse_专栏F|Cora单词168电脑(下):最强大脑,智慧的产物
  9. php mosquitto,mosquitto 扩展安装php客户端库-Go语言中文社区
  10. uva133-救济金发放
  11. struts2 tutor
  12. Node+Mysql增删改查obj-to-sql,多条件查询
  13. 海贼王 动漫 全集目录 分章节 精彩打斗剧集
  14. 无法访问其它家庭组计算机,Win7电脑同一个家庭组或者工作组,电脑无法相互访问...
  15. 基于卷积神经网络(CNN)的图像识别 之 火焰识别
  16. matlab两张图片合成一张_如何将多幅图合并在一起变成一张大图
  17. linux离线语音识别程序,linux离线语音识别安装运行总结
  18. MACOS PowerPoint导出指定分辨率的图片
  19. GoDaddy 推出第四代虚拟主机
  20. 什么叫轻量瓷_骨瓷碗价格多少钱

热门文章

  1. cad卸载_CAD卸载不干净,如何清理CAD注册表
  2. 2015年全国大学生电子设计竞赛A题(双向DC-DC变换器)训练总结(硬件部分)
  3. Android 9.0的One UI系统,三星S9/S9+更新One UI 安卓9.0已正式推送
  4. php导出excel代码,php导出excel的实例代码
  5. Linux 系统-----vim命令详解
  6. RPG Maker MV常用的一些插件
  7. dojo省份地市级联之省份Dao接口类(三)
  8. 利用msfvenom渗透win7
  9. SonarQube代码扫描工具
  10. UISwitch用法详解