現有的幾個Unity熱更新方案該如何選擇,各自的優缺點是什麼?

uLua、C#Light、Dll


目前正好在做這方面的調研,簡單說一下目前掌握的情況,拋磚引玉

- uLua 跟另外兩個方案比運行效率沒有優勢

- C#Light 不支持泛型,委託事件需要用特殊的方式封裝,詳見 CSLight研究院之學習筆記腳本NGUI里的回調方法(二)

- Dll iOS上貌似沒辦法動態載入,有了解的請指教

之後實際項目有積累以後再回來更新


推薦slua


目前可以選擇的有lua,還有l#,以及我後來重新設計的ILRuntime

lua的話比較適合由c++ + lua轉過來的團隊,如果本來團隊就習慣lua開發的話,可以嘗試使用uLua等lua的unity插件來進行邏輯開發,然後後期再更新

對於一開始就使用c#的團隊來說,如果想像在unity里一樣得進行開發的話,可以嘗試使用一下我設計的一個庫,現在已經開源。原理上跟L#差不多,不過性能上要優於L#不少,並且完全支持泛型和繼承腳本外的類這些l#做不到的用法,感興趣的話可以看我的github repo:https://github.com/liiir1985/ILRuntime

如果喜歡的話希望能給個星


我決定下個項目不支持熱更新了,組件的開發方式,好好設計的話,能排列組合出不少功能。

當前項目用的nlua(https://github.com/dpull/UnityLua),開發速度慢於c#,也不好調試


我們之前的項目用的是slua,順利上線了,沒有遇到什麼大的問題。

C#Light我們也研究過,在效率上相比lua並沒有很大的優勢,用起來感覺還是有不少坑要趟;DLL熱更新iOS上沒法用,不考慮。

加上我們之前做過cocos2dx+lua,對lua更了解,所以最後決定用slua

說一下優缺點吧:

1、debug的確麻煩一些,但是有個好處就是不用等編譯,你也知道代碼多了之後Unity的那個編譯速度有多慢,改完lua代碼直接啟動就可以跑,再開發一下甚至可以在運行時直接reload代碼,開發效率還可以

2、對程序員的技能要求低。只要lua跟C#、Unity交互的部分做好了,大家都只用在lua層面開發,與C#相比lua用起來還是簡單很多的

3、調試方便,真機運行時遇到lua的crash,可以直接拿到traceback顯示出來,方便及時發現問題。不過在線上的話還是要做好crash report。

4、動更方便,後來我們遊戲里的配置都直接轉成lua的table,require之後就直接用了,也沒有反序列化的效率問題,每次動更配置+代碼也就幾k,工具做好了之後修復bug什麼的很方便

5、性能問題,其實在我們項目中並沒有感覺到lua對性能用什麼影響= =

不過這個問題現在應該已經有標準答案了,畢竟鵝廠的xlua都開源了,那麼多項目都用,已經不用選了啊


不說ios的情況,我覺得android的熱更新涉及到bundle的製作都挺麻煩。


最新的slua 改動挺大的,聽說支持遠程調試 支持斷點調試 修改了底層c報錯導致Unity崩潰的Bug。等穩定版出來,立馬更新。

原答案

slua 最新版本支持泛型,插個題外話Tween類 建議用DOTween 比iTween好用,建立一個Mgr提供DOTween介面 slua導出 lua完美使用


dll在android上還可以搞搞,ios應該是不可能實現。

C#Light是不是沒有什麼成功的大案例,感覺太小眾,而且是不是語法上還有不少限制?

我反而覺得ulua可能是更為靠譜的方法。

//不過,話說回來,cocos-3d的js腳本方案有沒有考慮過?好像是可以熱更新,不過3d製作工藝比unity3d確實是差好多。。。


推薦閱讀:

unity燈光可以有兩個Directional Light嗎,unity會根據日光來模擬現實的時間嗎?
unity3D和AR VR有前景嗎?
unity如何寫出前後端通用的代碼?
Unity asset store有哪些值得購買的插件?
獨立開發者要不要從unity轉到ue4?

TAG:Unity遊戲引擎 |