最近正為游戲引擎選擇一款較好的邏輯腳本而頭疼不已
1. Lua
Lua用了5,6年的樣子,從LuaPlus到lua-tinker再到lua_bind. 雖然lua本身很小巧方便,但是其不支持面向對象特性,讓很多人在使用時模擬了很多面向對象的特性,但是這種做法在調試時簡直是噩夢.
我覺得游戲腳本最好是能預編譯成byte code,讓編譯器在編譯期將很多的bug暴露出來,而不是像lua那樣.很多空訪問錯誤必須要等到runtime才能暴露.讓調試效率大大降低.這點,mono C#就是極好的選擇.
2. Mono
由于Unity的流行,Mono被帶入游戲開發者的視線內.其內置的很多系統腳本都是用C#寫成,而且邏輯腳本用C#編寫也是非常清晰嚴謹的.
據說Mono在Windows下編譯異常麻煩,而且嵌入方式也沒有太多例子,現在這塊嚴重缺乏資料.
3. V8
Google V8正是由于Chrome而風靡起來.直接JIT方式就是Chrome速度飛快的原因.
最近down了一個下來試了下,果然名不虛傳,API也非常的易用.不過由于不是很熟悉JavaScript的原因, 自己用scons編譯出一個v8的shell,跑了一個帶類繼承的例子,居然不識別class關鍵字.這才感嘆還不如用小巧的lua呢.在我看來,JavaScript與Lua比較,也就是個能new,但是沒class的語言.也被別人稱為半吊子面向對象,都是使用prototype方式來實現類功能.
4. JavaScriptCore
在Google V8的類測試碰壁后,馬上研究了下Unity下的JavaScript到底用了什么庫,沒錯就是Apple Safari里的JavaScriptCore. 這東西資料比Mono還少,都是高齡庫了.想必整合不是一般的麻煩.但是還是不確定這個腳本引擎是否原生支持類
5. Python
Python? 沒想過這種格式詭異的語言,正如Unity里支持Boo(一種很類似Python的語言)很少有人用一樣, 上次用過Python是在一個build系統里, 游戲里是不會考慮這種腳本系統的,效率也是很大的原因.
6. AngleScript, GameMonkey
這兩種語言都是很老的游戲腳本語言,不過都是類c++方式的,不過由于項目使用不多,或許是有一定的bug,資料也相對較少,所以可能最后考慮