手游为什么要热更新,C#为什么不能热更新,LUA为什么可以
手游為什么要熱更新,C#為什么不能熱更新,LUA為什么可以
熱更新是什么?簡單的說就是打補丁,只補需要部分,不用重個游戲包重打上傳
熱更新問題的本質是代碼更新而不是資源更新,為什么呢?
大型手游都是將補丁資源放在專門的WEB服務器上,游戲啟動時動態下載并放入到游戲的持久化目錄中,這對安卓和蘋果都可以
但是代碼就特殊了:
1,由于不同類型的語言有不同的運行機制,編譯型語言如C#,是先編譯成一整塊中間碼然后在不同平臺上被.NET運行時解釋執行,這就是說使用C#編寫的APK或IPA安裝到手機上后是沒有任何C#文件的。這樣就算運行時將作為補丁的C#文件從WEB服務器上下載到持久化目錄也運行不了。但有個辦法是反射,見后而。
一,手游戲 為什么需要熱更新?
1,手游是快節奏的應用,功能和資源更新頻繁,特別是重度手游安裝包常常接近1個G,如果不熱更新,哪怕改動一行代碼也要重新打個包上傳到網上讓玩家下載。
2,對于IOS版本的手游包IPA,要上傳到蘋果商店進行審核,周期漫長,這對于BUG修復類操作是個災難。
基于以上兩點,熱更新就很重要了,快速,小巧,路過蘋果審核。
二,C#為什么不能熱更新
準確的說,C#在安卓上可以實現熱更新,但在蘋果上卻不能。
在安卓上可以通過C#的語言特性-反射機制實現動態代碼加載從而實現熱更新。
具體做法是:將需要頻繁更改的邏輯部分獨立出來做成DLL,在主模塊調用這些DLL,主模塊代碼是不修改的,只有作為業務(邏輯)模塊的DLL部分需要修改。游戲運行時通過反射機制加載這些DLL就實現了熱更新。
但蘋果對反射機制有限制,不能實現這樣的熱更。為什么限制反射機制?安全起見,不能給程序太強的能力,因為反制機制實在太過強大,會給系統帶來安全隱患。
三,LUA為什么可以熱更
LUA解釋型語言,并不需要事先編譯成塊,而是運行時動態解釋執行的。那C#為什么不做成解釋型語言呢?因為C#的定位是一個追求效率且功能強大的編譯型語言。這樣LUA就和普通的游戲資源如圖片,文本沒有區別,因此可以在運行時直接從WEB服務器上下載到持久化目錄并被其它LUA文件調用。
posted on 2018-03-25 22:21 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結
以上是生活随笔為你收集整理的手游为什么要热更新,C#为什么不能热更新,LUA为什么可以的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IPHONE 64位和32位
- 下一篇: C# unsafe模式内存操作深入探索