一:前言
HybridCLR又稱作huatuo(華佗)、wolong(臥龍)熱更方案,底層是C++編寫的,是一種熱更新方案,與Lua、ILRuntime等都是不同的熱更方案
HybridCLR擴充了il2cpp的代碼,使它由純AOT runtime變成AOT+Interpreter混合runtime,進而支持動態(tài)加載assembly,實現(xiàn)熱更新
HybridCLR官網(wǎng)
HybridCLR熱更原理
IOS不允許JIT的方式編譯,因為JIT是需要在運行時動態(tài)將IL代碼編譯為機器碼并將其保存在內存中,但是IOS是不允許執(zhí)行動態(tài)生成的機器碼(運行時分配的內存不允許執(zhí)行),所以相當于變相的封鎖了JIT這種編譯方式
而HybridCLR是實現(xiàn)了自己的一套解釋器去解釋執(zhí)行,解釋執(zhí)行不會在運行時生成額外的本地機器碼,而是運行時直接逐行分析并編譯成機器碼執(zhí)行,內存中不會保留,因此不受JIT編譯的限制
二:什么是熱更新
熱更新是指當游戲出現(xiàn)bug,或者需要修改,增加某個功能的時候,我們不需要重新下載安裝包,就可以更新游戲內容
當游戲上線后,遇見bug或者需要更新內容,一般有兩種做法
第一種:重新打包上傳一個新的安裝包到應用商店(需要審核,費時間),然后讓玩家下載新的客戶端安裝包(需要重新下載,費流量,會減少留存率)
第二種:在游戲內更新,游戲啟動時去下載需要更新的補丁包或資源
第一種我們一般在大版本更新時使用,稱為游戲整包更新,第二種稱為熱更新
三:熱更新流程
——發(fā)現(xiàn)bug并修改bug
——資源打AB包上傳,代碼使用熱更方案上傳
——玩家啟動游戲檢測是否需要更新
——下載補丁包
——檢測是否更新成功(例如通過MD5校驗)
——進入游戲
四:HybridCLR的優(yōu)點
——既不用像使用lua方案中需要多學習一門語言,也不用像ILRuntime方案中使用Mono虛擬機,效率低
——正因為HybridCLR是原生runtime級別實現(xiàn),熱更新部分的類型與主工程AOT部分類型是完全等價并且無縫統(tǒng)一的??梢噪S意調用、繼承、反射、多線程,不需要生成代碼或者寫適配器
五:工具安裝和配置HybridCLR環(huán)境
工具安裝
——Unity版本在2020以上
——Visual Studio必須安裝Windows Build Support(IL2CPP)或Mac Build Support(IL2CPP),Mac則需要安裝Xcode
——Visual Studio必須在2019版本以上
——Visual Studio必須安裝Unity的游戲開發(fā)
和使用c++的游戲開發(fā)
組件
配置HybridCLR環(huán)境
——從Package中安裝com.code-philosophy.hybridclr包
https://gitee.com/focus-creative-games/hybridclr_unity.git
或
https://github.com/focus-creative-games/hybridclr_unity.git
——菜單欄選擇HybridCLR—Installer,安裝成功后會在控制臺打印成功日志
——PlayerSetting—Scripting Backend選擇為IL2CPP
——PlayerSetting—Api Compatability Level選擇為Net 4.x或.Net Framework
——PlayerSetting—Use Incremental GC選擇為不勾選(自v4.0.0起已經(jīng)支持增量式GC, 但處于beta版本)
六:熱更實現(xiàn)
——編寫代碼,拆分程序集(AOT程序集和熱更程序集)
熱更的程序集不能被非熱更程序集所引用
——配置程序集
點擊菜單HybridCLR/Settings打開配置界面,將熱更的程序集添加到hotUpdateAssemblyDefinitions或hotUpdateAssemblies中(hotUpdateAssemblies不加dll后綴),
需要注意hotUpdateAssemblyDefinitions和hotUpdateAssemblies兩個列表是等價的,不要重復添加
——運行菜單HybridCLR/Generate/All
生成熱更的dll和AOT的dll以及一些橋接函數(shù),
將{project}/HybridCLRData/HotUpdateDlls/StandaloneWindows64
目錄下的熱更dll復制到Assets/StreamingAssets/HotUpdate.dll.bytes
(復制后的dll
要加.bytes
后綴)
——修改熱更代碼后。運行菜單命令HybridCLR/CompileDll/ActiveBulidTarget
重新編譯熱更新dll
將{project}/HybridCLRData/HotUpdateDlls/StandaloneWindows64
目錄下的熱更dll復制為剛才的打包輸出目錄的XXX_Data/StreamingAssets/HotUpdate.dll.bytes,
重新運行程序文章來源:http://www.zghlxwxcb.cn/news/detail-729996.html
七:注意事項
——熱更的程序集不能被非熱更程序集所引用
——由于Unity資源管理系統(tǒng)的限制,掛載熱更新腳本的資源(場景或prefab)必須打包成ab包,在實例化資源前先加載熱更新dll即可,如果不打成ab包會發(fā)生scripting missing的錯誤文章來源地址http://www.zghlxwxcb.cn/news/detail-729996.html
到了這里,關于Unity中實現(xiàn)HybridCLR熱更新的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!