很久沒寫新隨筆了,實在很內疚,最近為了工作在學習unity,發現Unity實在是個好東西,普通的程序員自學一段時間就可以很快做成游戲DEMO,可以說,Unity和Unreal3是當前在國內最熱的兩款游戲引擎,特別因為Unity的跨平台編譯,使得Unity做的3D手機游戲基本占領了移動市場。
unity可以使用C#、Javascript、Boo(類似Python)三種語言跨平台編譯(Windows、Linux、Unix、Android、iOS),看到這里的讀者一定和我當初一樣好奇,三門語法差異之大、運行環境如此不同的語言(且不常使用來制作游戲,常用的是LUA、Python)竟然能同樣為這么多架構都不同的平台服務,由於這學期有學習過編譯原理,所以理解起來並沒有那么困難,下面就分享下我這一早上的研究成果:
期中使用了兩個大型的開源項目:Mono和Boo,Mono項目允許跨平台的.net的框架,既允許將C#編譯成以上平台的機器碼,Boo項目(作者Rodrigo Barreto de Oliveira,分為Boo和Javascript兩部分),作者不但開發了可以在.net上運行的Boo語言(與作者狂愛Python有關),還寫了一個Javascript JIT,這是基於EMAC標准 寫的一個松散型Javascript,寫慣了Mozilla Javascript的人可能會不適應,總之這位大牛使得Boo、Javascript可以在.net框架下編譯、運行了。
正是把這兩個開源項目創造性地結合,使得Unity獲得如此優秀的能力(多語言、跨平台),寫這篇文章的目的一方面是想幫助有同樣疑惑的朋友打通Unity腳本到實現這一脈絡,對Unity有更深的理解,更大的原因最近在看《三傻大鬧寶萊塢》,突然有了一絲絲感悟:我們學軟件的不能死記硬背每個工具(語言、軟件、方法)的用法,而是要深刻理解這項工具的本質,這樣你就可以無拘無束的使用這個工具,達到減少開發周期的目的,有點像武俠小說“忘記招式”的境界。