Unity應用的iOS熱更新


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下的程序熱更新;JITiOS下無效。

• 熱更新方案:Unity+Lua插件。

 

•  使用Lua 插件進行iOS 熱更新的 原理

計算機生成了可選文字:
腳 本 
轉 化 為 
Lua 腳 本 可 
直 接 解 釋 執 
行 
Apple 
邏 輯 代 碼 
代 碼 生 成 技 術 
( 如 Protobu0 
文 本 資 源 ( 如 同 紋 理 、 音 頻 等 ) 
更 新 資 源 的 形 
式 更 新 程 序 
unity

 

• 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 熱更新的總體流程

計算機生成了可選文字:
游 戲 
游 戲 公 司 
待 更 新 資 ( 數 據 & 邏 輯 ) 
Apple 
熱 更 新 
游 戲 
App Store 
用 戶 
待 更 新 資 源 ( 數 據 & 邏 輯 ) 
V

計算機生成了可選文字:
(AssetBundles) 
AssetBundles 
Runtime 
StreamingAssets 
AssetBundles 
persistentDataPath

 

支持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 會更好一些。

測試結果就不弄了 , 大家可以下載PDF 自己看

 

http://china.unity3d.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM