由於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中設...