Unity3D熱更新全書-指令碼(一) 初識指令碼

瘋光無線發表於2014-08-01

開篇之前還是要先說明,這是一份給經驗並不豐富的程式設計師閱讀的文字。

有需求、有疑惑,往下看。

第一個問題什麼是指令碼?程式和指令碼如何區分?我們給Unity編寫的元件是程式還是指令碼?

這些問題本文無意去解答,因為其中混合著太多有立場的東西,站在不同的立場會有不同的看法,這其中的矛盾不是簡單可以調和的。

只要提出一個觀點,就很容易陷入語言大戰的泥潭。

我們不妨從另一個角度來思考,為什麼要分程式和指令碼,是為了找一條分界線。

這條分界線叫做靈活。

我們這個專題的出發點是探討Unity3D客戶端資源更新,已這個出發點劃條線,不靈活的站左邊,靈活的站右邊。

試思考如下情景

一個玩家,初始HP200,初始MP200

我們採用兩個方案來完成

左邊 右邊
元件裡直接寫程式碼
Player.HP=200;
Player.MP=200;
寫一個配置檔案Player.InI
HP=200
MP=200

元件裡寫程式碼
Player.HP = GetInIValue(“HP”);
Player.MP=GetInIValue(“MP”);

當策劃(萬惡的策劃,本篇的主要反面人物)說哎呀,不行,玩家的初始HP要改成500。

從我們的出發點來衡量:

左邊,災難,玩家要再經歷一次下載安裝客戶端的煎熬。

右邊,只要讓Player.InI更新到客戶端,這就可以在玩家重啟客戶端的時候完成。

左邊,不符合資源更新的精神。

右邊,符合。

此時我們就認為右邊的Player.Ini是一種指令碼,我們所稱的指令碼就是可以讓邏輯發生變化的東西。

這時候有一些經驗的人可能會站出來反對:那是配置檔案,算什麼指令碼,指令碼要邏輯的。

反對有效,讓我們更進一步

Player.InI

HP = (today==Monday)?100:200

MP =(today==Sunday)?400:200

如此,你還會認為配置檔案和指令碼是完全不相干的東西麼?

如果你對三目運算子不是那麼熟悉,可以看看展開的寫法

if(today==Monday)HP=100

else HP=200;

if(today==Sunday)MP=400

else MP=200;

通過這個程式碼可以看出策劃如此做的用意:我們的主人公有周一恐懼症,週一HP減半,週日太High,估計是個碼農,週六加了一天班,週日開心的MP翻倍。

只要我們假定策劃的這種點子根本停不下來,隔三差五就要改一次。

你是不是會產生一種強烈的衝動:恨不得把所有程式碼寫在配置檔案的字串裡

這就是指令碼,寫在字串裡的程式碼。只因為字串夠靈活。

執行字串裡的程式碼,有個叫法,叫做Eval。

我們將在下一篇來點例項。

順便一提C#也被一部分人認為是寫在字串裡的程式碼,這就是一種立場。不要做互斥立場的爭論,那毫無意義,只有當我們立場一致,爭論才能帶來思維的碰撞。

相關文章