Unity3D熱更新全書FAQ

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

只要有程式設計師朋友們問過兩次的問題

就會收錄在此FAQ中

 

1.C#Light對比LUA有什麼好處

C#Light是靜態型別指令碼語言,語法同C#,Lua是動態型別指令碼語言,這兩種都有人喜歡。

我更喜歡靜態型別,於是有了C#Light

2.C#Light效能怎麼樣

C#Light和Unilua 和ulua都做過簡單效能測試,比Unilua快,和ulua各有勝負

3.C#Light IOS可以使用麼

完全可以,均妥善測試

4.為什麼C#Light例子和NGUI一起用會編譯不過

因為Unity沒有庫的概念,要每個專案裡都放一份原始碼,這樣會讓GITHUB程式碼變得非常凌亂。

所以在例子裡是直接把C#Light 的DLL放進來了.

實際要改例子的話,請刪除CSLightEvil35.DLL,直接從CORE中找到C#Light的原始碼,C#LE目錄,然後將這個目錄直接插入Unity專案。

5.為什麼C#Light有那麼多限制,使用型別還要註冊

因為C#Light的設計之初就為了相容AOT拋棄了很多,而相容AOT就是為了能在IOS上順利使用。

為此,我們不能執行時產生新的IL型別,所以不能繼承程式的型別。所以指令碼class型別和程式class型別不同

不能執行時模板推斷,所以不能自動List<T>,要手動繫結List<int>,List<String>

不能執行時模板推斷,所以不能自動呼叫GetComponent<T> 這類方法,改呼叫 GetComponent(“UILabel”) as UILabel

這些限制都是由AOT相容導致,用一點點約束,換來IOS的相容性,還是值得的

6.C#Light出錯怎麼查

有統一的Dump機制,在Unity3D熱更新全書-指令碼(三)有介紹

7.C#Light的程式碼放在StreamingAssets裡是什麼意思,真的能熱更新麼

真的可以熱更新,你把例子生成exe,改了streamingassets的指令碼,再執行就會有效果。

放在StreamingAssets裡是為了演示可以在執行時載入字串處理,同時例子比較容易看

實際專案還是要把指令碼獨立放出來,在Unity3D熱更新全書-指令碼(四)有介紹

相關文章