Unity之熱更初探

2021-09-12 02:58:20 字數 827 閱讀 8400

由於c#是編譯+解釋型的語言,所以遊戲在出包之後想要再修改一些程式就比較困難。

通過不斷查詢找到幾種可行的方案:

1.更新dll,利用反射做**的更新。(在ios上有限制,無法使用)

2.引入嵌入式指令碼語言lua。(有tolua、xlua等框架)

3.採用ilruntime等第三方框架。

最終還是選擇xlua框架。

雖然據說效率方面不如tolua,但是用起來還是挺方便的。

通過乙個多禮拜的學習,大致了解到xlua為我們提供了兩個大方向:

1.用lua呼叫c#的方式來寫邏輯,通過assetbundle更新lua檔案來更新邏輯。

2.通過熱修復的方式覆蓋原本的c#**,達到更新原**的目的。

在實際開發中,兩種方式肯定是要同時使用的。

具體的使用,xlua官方的教程、文件和案例說的非常詳細。

前天偶然聽到大佬提起記憶體洩漏的問題,我也開啟我做的簡單的商店demo測試了一下。

(在實際操作過程中發現,官方文件裡提到的記憶體洩漏定位工具已經棄用。。

於是在git上反覆查詢,終於找到了新的記憶體洩漏檢測工具,但是好像還不如之前的好用?)

不測不知道,一測嚇一跳。雖然xlua為我們做了一些記憶體**工作。

但由於寫的時候完全沒有考慮到記憶體安全。這個功能很簡單的模組,進出一次就會洩漏接近200kb的記憶體。

好好找了下原因,發現大部分都是引用持有問題。

儘管c#指令碼已經銷毀,但是lua側持有一些引用的變數所在的記憶體,並不會被釋放。

在銷毀指令碼時,手動將這些持有引用的變數設為nil,這些記憶體就可以被正常**了。

至於還有一些沒有找到洩漏處,等過一陣再回過頭找。。。

Lua室驗室之Unity熱更設計

現在有許多unity遊戲都採用了熱更新的方式更新內容,最普通的熱更方式就是用lua指令碼,那麼在設計熱更方式時,哪些內容需要用lua來寫,哪寫用c 來寫?熱更新如何架構?更新流程如何設計呢?一般來說凡是效率相關的 比如地圖排序,尋路 平滑顯示相關的 比如人物移動,頭頂血條位置 都用c 寫,凡是涉及到...

Unity 的跨平台以及熱更

1.unity的跨平台原理 首先說到unity的跨平台。unity的跨平台是基於mono實現的,在windows上,netframework提供了vs的編譯器,將c 編譯為cil的 指令集 中間碼 然後通過clr將中間碼變為機器碼執行。cil是一種可以在任何支援cli common language...

Webpack 自動熱更

npm i webpack dev server d npm i html webpack plugin d 將package.json的指令碼改成webpack serve即可 scripts 注意 webpack5可能將啟動專案目錄改在了public上需要在webpack.config.js中設...