Unity官方公布熱更新方案效能對比淺析

來源:互聯網
上載者:User

Unity官方公布熱更新方案效能對比淺析

 

Unity應用的iOS熱更新

作者:丁治宇

Unity TechnologiesChina

 

Agenda

? 什麼是熱更新

? 為何要熱更新

? 如何在iOS 上對Unity 應用進行熱更新

? 支援Unity iOS 熱更新的各種Lua 外掛程式的對比


什麼是熱更新

? 廣義定義

? 無需關閉伺服器,不停機狀態下修複漏洞,更新資源等,重點是更新邏輯代碼。

? 狹義定義( iOS熱更新)

? 無需將代碼重新打包提交至AppStore,即可更新用戶端的執行代碼,即不用下載app而自動更新程式。

? 現狀

? 蘋果禁止了C#的部分反射操作,禁止JIT(即時編譯,程式運行時建立並運行新代碼),不允許邏輯熱更新,只允許使用AssetBundle進行資源熱更新。


為何要熱更新

? 縮短使用者擷取新版應用的用戶端的流程,改善使用者體驗。

? 具體到iOS平台的應用上,有以下幾個原因

? App Store的審核周期難控制。

? 手機應用程式更新頻繁。

? 對於大型應用,更新成本太大。

? 終極狀態

? 不重新下載、不停機狀態下完全變換一個應用的內容。


如何在iOS 上對Unity 應用進行熱更新

? Android 應用的熱更新

? 將執行代碼先行編譯為assemblydll。

? 將代碼作為TextAsset打包進Assetbundle。

? 運行時,使用Reflection機制實現代碼的功能。

? 更新相應的Assetbundle即可實現熱更新。

 

? Android 與iOS 熱更新的 異同

? 蘋果官方禁止iOS下的程式熱更新;JIT在iOS下無效。

? 熱更新方案:Unity+Lua外掛程式。

 

? 使用Lua 外掛程式進行iOS 熱更新的 原理

 

? Unity 熱更新的注意點

? 需要更新的代碼、資源,都必須打包成AssetBundle(建議使用未壓縮的格式打包)

? 熟悉Unity的幾個重要的路徑

? Resources(唯讀)

? StreamingAssets(唯讀)

? Application.dataPath(唯讀)

? Application.persistentDataPath(可讀寫)

 

? 重要路徑之 之Resources

? Resources檔案夾下的資源無論使用與否都會被打包

? 資源會被壓縮,轉化成二進位

? 打包後檔案夾下的資源唯讀

? 無法動態更改,無法做熱更新

? 使用Resources.Load載入

 

? 重要路徑之StreamingAssets

? 流資料的緩衝目錄

? 檔案夾下的資源無論使用與否都會被打包

? 資源不會被壓縮和加密

? 打包後檔案夾下的資源唯讀,主要存放二進位檔案

? 無法做熱更新

? WWW類載入(一般用CreateFromFile ,若資源是AssetBundle,依據其打包方式看是否是壓縮的來決定)

? 相對路徑,具體路徑依賴於實際平台

?Application.streamingAssetsPath

? IOS: Application.dataPath + “/Raw” 或Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw

 

? 重要路徑之Application.dataPath

? 遊戲的資料檔案夾的路徑(例如在Editor中的Assets)

? 很少用到

? 無法做熱更新

? IOS路徑: Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data

 

? 重要路徑之Application.persistentDataPath

? 持久化資料存放區目錄的路徑( 沙箱目錄,打包之前不存在 )

? 檔案夾下的資源無論使用與否都會被打包

? 運行時有效,可讀寫

? 無內容限制,從StreamingAsset中讀取二進位檔案或從AssetBundle讀取檔案來寫入PersistentDataPath中

? 適合熱更新

? IOS路徑: Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents

 

? 使用Lua 外掛程式進行iOS 熱更新的總體流程

 

支援Unity iOS 熱更新的各種Lua 外掛程式的對比

? uLua(asset store)

? uLua外掛程式原生版本,開山鼻祖

? 不會產生靜態代碼

? 反射機制,效率低下,速度慢,gcalloc頻繁

? 已停止更新維護,不支援Unity5.x,淡出主流

 

? uLua & cstoLua

? 開發平台成熟穩定,Bug修複迅速

? 開發人員眾多,資源豐富

? 靜態方法,效能優

?有成功商業產品案例(啪啪三國、超神戰隊、酷魚吧捕魚、絕地戰警、這不是刀塔等) 魚、絕地戰警、這不是刀塔等)

? 都是基於原生版本的改進;未來,兩者會合并成一個外掛程式

 

? sLua

? 靜態方法,效能優

? 核心代碼簡潔

? 資源較少,開發平台不夠成熟穩定

? 無 無成功商業產品案例 成功商業產品案例

? 基於原生版本的改進


支援Unity iOS 熱更新的各種Lua 外掛程式的對比

? C#Light(L#)

? 淡出主流

? uniLua

? c#實現的Lua虛擬機器,非完整方案

? 淡出主流


支援Unity iOS 熱更新的各種Lua 外掛程式的對比

然後就是 uLua 和 sLua的測試代碼。

綜合來看 肯定是 uLua 會更好一些。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.