開篇之前還是要先說明,這是一份給經驗並不豐富的程序員閱讀的文字。
有需求、有疑惑,往下看。
第一個問題什么是腳本?程序和腳本如何區分?我們給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#也被一部分人認為是寫在字符串里的代碼,這就是一種立場。不要做互斥立場的爭論,那毫無意義,只有當我們立場一致,爭論才能帶來思維的碰撞。
