腳本不是游戲業(yè)的新技術,但腳本為業(yè)外的人所知悉,卻應歸功于《魔獸世界》(以下簡稱Wow)在世界范圍的流行。通過Wow偉大的自定義界面系統(tǒng),Lua這一腳本語言一舉成名天下知。
雖然Lua的出名有點橫空出世的感覺,但游戲業(yè)內早就使用腳本來開發(fā)游戲了。即便是在國內,我們所熟悉的網游大多數(shù)是用腳本開發(fā)的。此前已有人士透露,網游的長青樹《夢幻西游》和《大話西游2》就大量應用了腳本技術;特別是《大話西游2》,比Wow早幾年做了基于Lua腳本的游戲開發(fā)??梢哉f,國內與國外在腳本技術上并不存在差距,大家都是站在同一起跑線上的,這為國內游戲行業(yè)趕超國際水平提供了強大的保障。
回顧過去,我們發(fā)現(xiàn)單機版游戲時代很少聽到腳本這個詞。那么,為什么在網游時代腳本成了業(yè)界寵兒?原因是多方面的。比如在單機時代,無論游戲機還是PC的性能都非常低下,需要具有更高執(zhí)行效率的編譯型語言來“壓榨”機器性能。但硬件性能的提升并不是腳本流行開來的決定性因素,真正的原因是市場的需要。
網游時代的市場需求快速變化、競爭激烈,如果延用單機時代一年半載才出一個新版本的開發(fā)方式,那必然會被市場淘汰。正是這種快速變幻的市場需要和低效的開發(fā)工具之間的矛盾,引發(fā)了開發(fā)工具的革命—— 腳本語言風生水起。腳本的興起因為游戲業(yè)中傳統(tǒng)的編譯型語言(asm/C/C++)的性能優(yōu)勢在硬件性能大幅攀升的今天已經不復存在。在網游時代,游戲業(yè)中的主要矛盾已經由性能低下的硬件與游戲執(zhí)行效率之間的矛盾轉變?yōu)榭焖僮兓氖袌鲂枰c低效的開發(fā)工具之間的矛盾,腳本在網游時代的輝煌是歷史的必然。
除了市場和硬件因素外,還有一點不能忽略。那就是C/C++進行游戲開發(fā)的高成本性和高項目風險。隨著java/.net逐年流行,大學生中學習C /C++編程語言的人越來越少。物以希為貴,人亦如是。C/C++程序員新鮮血液補給少,而網游開始流行,巨大的網游市場需求造成大量的人才空缺,這時也就帶來了C/C++的高成本。即便是資本雄厚的公司,可以雇傭大量C/C++程序員開發(fā)游戲,也不能無視C/C++高級特性和高度的靈活性帶來的高項目風險。C/C++是易學難精的編程語言,應用在大型項目的時候極容易因為程序員的水平參差不齊而引起溝通不暢,還有濫用的高級特性也容易引入大量的bug。游戲公司希望找到一個方案以解決高成本、高風險的問題——這個方案就是在游戲中使用腳本。
腳本的現(xiàn)狀
腳本解決了C/C++無法解決的開發(fā)效率難題,而且降低了成本和風險。腳本在游戲業(yè)中就此蓬勃地發(fā)展了起來,現(xiàn)在腳本技術已經成為游戲業(yè)中不可或缺的一環(huán)。橫看當前腳本技術,一片大好形勢就如同八九點鐘的太陽。不僅語言百家爭鳴,而且書籍也層出不窮;不僅在游戲業(yè)開花結果,在web等其它應用也大放異彩。
首先,我們來看看現(xiàn)在比較流行的腳本: Python、Lua、ruby和Erlang。Python和Lua是網絡游戲開發(fā)的中堅力量;ruby憑借ruby on rails的web開發(fā)框架的強勁力量,不可小瞧它在游戲業(yè)的前途;erlang在高并發(fā)性上的原生優(yōu)勢吸引了無數(shù)追求高性能的網游服務器的開發(fā)人員的目光。
然后讓我們來看看書籍和資料方面。大家都知道,文檔對語言的普及起到正向催化劑的作用,甚至可以看作是語言的有機組成部分,必不可少。Python經過基金會的多年經營和在NASA、Google得到重用的原因,書籍方面比較豐富;ruby隨著RoR的流行水漲船高,這兩年行情看好,書籍也出版得越來越多了;反觀Lua,雖然流行度一直走高,但出來的書卻沒有幾本,跟他苦澀的接口設計和缺乏針對大型應用的原生支持不無關系;Erlang是典型的少眾語言,但隨著多核時代的來臨和高并發(fā)網絡應用的需求,有著光明的發(fā)展前景,現(xiàn)在《Programming Erlang》等書已經在策劃出版了。
最后把焦點重新聚集到游戲開發(fā)行業(yè)中來,可以發(fā)現(xiàn)腳本言語已經在游戲業(yè)中開發(fā)結果,碩果累累。除了前文提到的《魔獸世界》和網易經典“西游系列”都使用了腳本外,現(xiàn)在大多數(shù)流行程序都使用腳本,如騰訊的《QQgame》和搜狐的《天龍八部》等。現(xiàn)在的游戲引擎也都提供了腳本接口,無論是商業(yè)的Unreal 引擎還是開源的OGRE,無一例外。
腳本的優(yōu)勢
腳本在游戲業(yè)中找到自己的一席之地,是因為網游市場需要一個快速開發(fā)方案來避免C/C++開發(fā)帶來的項目高成本和高風險。那么,具體而言腳本相對于C/C++這類編譯型語言有什么優(yōu)勢呢?
一、易于學習、代碼可維護性強。通常腳本的語法都非常簡單,也沒有太多高階的特性,學習的門檻較C/C++低得多。如Python號稱只需要花一個下午即可學會。這使得游戲開發(fā)公司可以招聘完全沒有腳本編程經驗的新手,通過低成本的培訓,迅速走上工作崗位。除易于學習外,腳本代碼也有更好的可維護性(盡管寫出沒有人看得懂的Lua代碼也非難事)。因為腳本不會有很多高階特性(如C++里的模板元編程就是高階特性),所以腳本程序員有更多精力關注架構、模式、重用和測試,從而提高了代碼的質量;相應地,沒有那么多讓人困惑的高階特性,也使得代碼“簡潔”不少。
二、降低開發(fā)成本。如第一點所言,腳本易于學習,使得游戲開發(fā)公司可以大量應用新手,是降低成本的有效手段。那么如何來保證新手寫的代碼的質量呢?這需要我們辯證地看問題。從經驗上看新手寫的程序無論用什么言語,bug肯定不少。但一個C新手編寫的代碼和Python新手編寫的相同功能的代碼相比,C版本應該會有更多的 bug。由于C程序需要編譯,而腳本程序(大部分)都可以直接解釋執(zhí)行,所以在排除bug方面腳本也有先天的優(yōu)勢,這使得腳本在低成本的同時能夠更好地保證代碼質量。
三、形成人才壁壘。軟件開發(fā)行業(yè)是一個動蕩的行業(yè),無數(shù)的程序員都在跳槽和謀劃跳槽的狀態(tài)中過日子。使用腳本開發(fā),形成人才壁壘是游戲業(yè)減少人才流動的有效手段。因為腳本現(xiàn)在除了在游戲業(yè)中大紅大紫外,并沒有在其它行業(yè)形成殺手級應用(雖然在web開發(fā)方面也有燎原之勢,但終究不似在游戲業(yè)中的地位高尚)。這就讓游戲程序員很少會考慮非游戲業(yè)的職位,而其它行業(yè)的程序員卻可能會因為腳本的易學習性轉投游戲業(yè)。腳本除了能有效形成行業(yè)間的人才壁壘外,也能有效地形成企業(yè)間的人才壁壘。因為現(xiàn)有的腳本種類繁多,不同公司往往有不同的選擇,甚至有些公司使用自己開發(fā)的腳本語言。程序員從公司A跳槽到公司B可能就要學習使用另一種腳本,這提高了跳槽的成本,從而使人才流動減少。
腳本的發(fā)展趨勢
依照目前的趨勢來看,腳本語言也一定會更加普及開來,而且會滲透到其它行業(yè)中去。隨著網游從業(yè)人員的增長,腳本程序員也一直相應地增長著,而且Web2.0熱潮引起的網絡需求,也促生了一批批新的腳本程序員。網游市場就像一個正在滾動的雪球,帶動著腳本的普及。
隨著腳本在游戲業(yè)中越來越流行,市場就會需要更高的生產效率。腳本雖然一定程度上緩解了市場與生產工具之間的矛盾,但仍然不夠徹底。由于市場競爭趨于激烈,而網游在很多功能實現(xiàn)都相差無幾:如網絡、數(shù)據(jù)庫、圖形甚至部分邏輯。這必然會催生網游生產組裝化——大量的中間件相互組合形成新的網游。從現(xiàn)在來看,Bigworld、PhysX和Unreal等都是比較流行的網游中間件。腳本語言是粘合各個中間件的良好膠水語言,所以隨著網游生產組裝化,腳本有良好的發(fā)展空間。
那么,當腳本發(fā)展到如日中天的時候,會取代C/C++這些編譯型語言嗎?我認為不會。腳本語言和編譯型語言在生產效率和執(zhí)行效率上各擅勝場,網絡游戲既需要能快速應變的腳本,也需要能快速執(zhí)行以提供更絢麗游戲效果的編譯型語言,在未來,它們之間會保持長久的和諧互補關系,相輔相成。
結語
綜上所述,網游時代是上帝賜予腳本語言的絕好時機,腳本語言很快將迎來自己光芒四射的世代。腳本語言擁有編譯型語言無可比擬的生產效率優(yōu)勢,它們將并肩奮戰(zhàn)在游戲最前線。