最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

一小時(shí)極速掌握HybridCLR熱更新

2022-08-19 19:30 作者:獨(dú)立游戲人-老雷  | 我要投稿

HybridCLR熱更新是一個(gè)新的熱更新方案,根據(jù)HybirdCLR的官方自述,它的性能和開(kāi)發(fā)的便利性相較于傳統(tǒng)的熱更方式都有了大幅度的提升

本文會(huì)為大家講解HybridCLR的詳細(xì)情況以及如何基于HybridCLR進(jìn)行游戲熱更新


版權(quán)聲明

  • 本文為“優(yōu)夢(mèng)創(chuàng)客”原創(chuàng)文章,您可以自由轉(zhuǎn)載,但必須加入完整的版權(quán)聲明

  • 更多學(xué)習(xí)資源請(qǐng)加QQ:1517069595或WX:alice17173獲?。ㄆ髽I(yè)級(jí)性能優(yōu)化/熱更新/Shader特效/服務(wù)器/商業(yè)項(xiàng)目實(shí)戰(zhàn)/每周直播/一對(duì)一指導(dǎo))

  • 詳細(xì)內(nèi)容可觀看文末完整視頻

HybridCLR有哪些不同之處

  • 語(yǔ)言/虛擬機(jī)

    • ToLua和Xlua都是基于Lua的熱更新方案,端游時(shí)代里經(jīng)常會(huì)使用Lua作為腳本熱更新的方案,在之后的手游時(shí)代里出現(xiàn)了ILRuntime熱更新方案,現(xiàn)在又出現(xiàn)了HybridCLR熱更新方案

    • 傳統(tǒng)的熱更新方案,不管是ToLua還是Xlua方案,都是基于另外一門(mén)編程語(yǔ)言,比如你在學(xué)習(xí)Unity時(shí)會(huì)用到的編程語(yǔ)言是C#,如果你要想用Lua進(jìn)行熱更新,那么你還要再學(xué)一門(mén)Lua編程語(yǔ)言

    • 為了降低學(xué)習(xí)成本,就出現(xiàn)了ILRuntime熱更方案,ILRuntime基于C#編程語(yǔ)言,它的好處就是你不再需要從頭學(xué)習(xí)Lua,可以直接基于C#進(jìn)行編程

    • 但I(xiàn)LRuntime與Lua有一個(gè)共同的缺點(diǎn),就是都有自己的虛擬機(jī)環(huán)境,它們會(huì)用虛擬機(jī)解釋Lua或C#的指令,正是由于這個(gè)虛擬機(jī)的存在,造成了不管是Lua還是C#,它們的語(yǔ)言翻譯成機(jī)器指令后都需要由專(zhuān)門(mén)的虛擬機(jī)進(jìn)行解釋?zhuān)缓笤倥cUnity的原生執(zhí)行環(huán)境進(jìn)行雙向交互,這樣就造成了交互開(kāi)銷(xiāo),所以在ILRuntime之后又提出了一個(gè)新的熱更新方案,也就是HybridCLR

    • HybridCLR沒(méi)有虛擬機(jī),這是它與傳統(tǒng)熱更新方案最本質(zhì)的區(qū)別,也正是由于它沒(méi)有虛擬機(jī),所以它沒(méi)有虛擬機(jī)之間進(jìn)行雙向數(shù)據(jù)交互的CPU和內(nèi)存開(kāi)銷(xiāo)

  • 學(xué)習(xí)曲線

    • 由于Xlua和ToLua都是基于Lua語(yǔ)言的,而Lua語(yǔ)言是一種弱類(lèi)型的語(yǔ)言,所以沒(méi)辦法得到精確的代碼提示,網(wǎng)上雖然有一些能夠提供代碼提示的工具,但這些工具都是基于原生語(yǔ)言的解析,本身的代碼提示也不是特別精確,并且你除了要學(xué)習(xí)Lua語(yǔ)言外,還需要學(xué)習(xí)基于Lua的面向?qū)ο?、Lua的編程框架

    • 這些知識(shí)其實(shí)都是為了使用Lua而增加的額外負(fù)擔(dān),所以更精簡(jiǎn)的方案就是使用ILRuntime,再精簡(jiǎn)一點(diǎn)就是使用HybridCLR

    • ILRuntime還有一個(gè)問(wèn)題就是雖然語(yǔ)言上統(tǒng)一了,但由于ILRuntime本身也有自己的虛擬機(jī),所以ILRuntime的數(shù)據(jù)類(lèi)型并不統(tǒng)一,需要對(duì)一些特殊情況專(zhuān)門(mén)進(jìn)行適配,比如一些泛型、代理、繼承等等

    • HybridCLR不需要做任何適配,也不需要額外學(xué)習(xí)編程語(yǔ)言,它的底層機(jī)制是修改了Unity的一部分源碼,所以是無(wú)感透明的

  • 性能方面

    • ToLua和XLua的性能是比較低的,ILRuntime的性能相對(duì)要好一些,HybridCLR由于沒(méi)有虛擬機(jī),所以性能也會(huì)高一點(diǎn)

  • 成熟度

    • 端游時(shí)代里用ToLua和Xlua的比較多,但如果你到現(xiàn)在還在學(xué)習(xí)ToLua或者Xlua熱更新,那么你的項(xiàng)目可能是一些比較傳統(tǒng)的項(xiàng)目,就比如國(guó)內(nèi)的一些MMORPG游戲,這些游戲大多都是從端游時(shí)代移植過(guò)來(lái)的,所以它們的主流熱更新方案就是Lua

    • ILRuntime是有Unity官方支持的

    • 雖然HybridCLR是一個(gè)新的熱更方案,但據(jù)官方描述,它并沒(méi)有太大的問(wèn)題,現(xiàn)在也正在接入一些商業(yè)項(xiàng)目

什么是游戲熱更新

  • 游戲熱更新的更新流程是什么樣的?

    • 從軟件商店下載游戲App并安裝到手機(jī)上,啟動(dòng)手機(jī)上的游戲時(shí)會(huì)連接游戲的服務(wù)器,檢查服務(wù)器上面有沒(méi)有更新文件列表,如果有,就會(huì)把更新內(nèi)容下載下來(lái),沒(méi)有就不更新,這是游戲玩家的熱更新流程

    • 游戲開(kāi)發(fā)者的熱更流程是? ??

      • 1,制作游戲更新內(nèi)容,可能是新的資料包、新玩法、新道具、數(shù)值調(diào)整

      • 2,更新內(nèi)容完成以后,開(kāi)發(fā)者會(huì)把它們打包成Unity里的AB包并上傳到資源更新服務(wù)器上,上傳更新內(nèi)容的同時(shí)還要上傳更新目錄索引,更新目錄索引中儲(chǔ)存的是文件、模型、貼圖資源的索引和資源內(nèi)容

      • 3,這時(shí)玩家打開(kāi)游戲就會(huì)檢查更新,并下載更新資源

Unity的熱更新以及Unity如何編譯和執(zhí)行游戲腳本的詳細(xì)內(nèi)容可以參考我們的《Unity熱更新那些事》,這里只是為HybridCLR做鋪墊

游戲熱更新的種類(lèi)

  • 游戲能做的熱更新有兩種,一種是游戲資源熱更新,另一種是游戲代碼熱更新,有同學(xué)可能會(huì)說(shuō)游戲熱更新一般都是指資源熱更新,代碼怎么能熱更新呢?

    • 代碼在電腦里是以文件的形式存儲(chǔ)的,所以代碼也是一種資源,既然是資源的話(huà),那就可以熱更,但Unity本身是不支持代碼熱更的,因?yàn)槿f(wàn)一程序代碼熱更新更新出的代碼是被病毒感染的,那么就會(huì)對(duì)用戶(hù)的手機(jī)造成很多不良影響

    • 所以Unity不能直接支持熱更,包括IOS這樣的游戲市場(chǎng)也不允許你隨意更新游戲代碼

  • 我們平時(shí)在網(wǎng)上看到的各種各樣的熱更新內(nèi)容,其實(shí)無(wú)外乎就是為了繞過(guò)蘋(píng)果或安卓渠道的審核,以一種安全的方式把游戲的更新以增量的形式發(fā)布到客戶(hù)手機(jī)上,而不需要重新從游戲市場(chǎng)上全量下載整個(gè)游戲更新包,這就是代碼熱更新的意義所在

HybridCLR的打包模式

  • 如果想用使用HybridCLR熱更,那么在選擇打包模式時(shí),腳本后臺(tái)就不能用默認(rèn)的Mono方式來(lái)進(jìn)行打包,必須切換到IL2CPP方式,這是HybridCLR熱更的特點(diǎn)

  • Mono的腳本執(zhí)行是C#代碼,而IL2CPP是把它轉(zhuǎn)成C++代碼,C++代碼本身的性能就比C#代碼要高

  • 使用IL2CPP方式進(jìn)行打包后,如果打的是安卓包,那么你就會(huì)看到一個(gè)libil2cpp.so文件,這個(gè)文件里存儲(chǔ)的是最終編譯出的代碼

IL2CPP的編譯原理

  • 程序員寫(xiě)的C#代碼會(huì)被C#編譯器編譯成Assembly-CSharp.dll,這個(gè)dll是以微軟中間匯編的形式存儲(chǔ)的,如果你使用的是Mono虛擬機(jī),那么腳本編譯流程到這里就結(jié)束了,也就是執(zhí)行完下圖被紅框框選的內(nèi)容后便結(jié)束了

  • 但如果你用的是IL2CPP方式就不一樣了,之前Mono腳本編譯的內(nèi)容可以分為用戶(hù)代碼和其他庫(kù)代碼,使用IL2CPP方式會(huì)把這些代碼轉(zhuǎn)換成C++代碼的源碼,然后利用Native C++ Compiler把C++源碼編譯成機(jī)器指令,這個(gè)機(jī)器指令會(huì)被IL2CPP的虛擬機(jī)加載執(zhí)行,具體流程如下圖

  • 如果能看懂上面IL2CPP的編譯流程,那么我再稍微提示一下,大家或許就能明白HybridCLR是什么東西了

    • 由于C++代碼沒(méi)有C#那樣的完整類(lèi)型信息,所以為了獲取完整類(lèi)型信息,HybridCLR需要對(duì)IL2CPP進(jìn)行改造

    • HybridCLR會(huì)下載一個(gè)名為il2cpp_plus的項(xiàng)目,這個(gè)項(xiàng)目會(huì)把泛型方法、泛型數(shù)據(jù)類(lèi)型、以及其他的一些支持添加到IL2CPP里面

  • HybridCLR的熱更新部分是怎樣去做熱更新的呢?

    • 程序員寫(xiě)的這些程序最終會(huì)形成IL2CPP這樣的程序集,這個(gè)程序集里只包括一些沒(méi)有熱更新的代碼,HybridCLR干的事情就是在IL2CPP的編譯流程中(也就是下圖標(biāo)注的位置)引入了HybridCLR

  • HybridCLR在這個(gè)位置就相當(dāng)于虛擬機(jī),但不等于虛擬機(jī),它在這里編譯了熱更代碼,這就是HybridCLR要做的事情

  • 所以HybridCLR實(shí)際上有兩個(gè)庫(kù),一個(gè)是HybridCLR庫(kù),另外一個(gè)庫(kù)就是剛才講的il2cpp_plus庫(kù),HybridCLR需要這兩個(gè)庫(kù)才能完成完整的HybridCLR熱更新功能

關(guān)于Unity熱更新,大家可以參考我們的《Unity熱更新那些事》


下載HybridCLR示例項(xiàng)目

  • 想要快速上手掌握HybridCLR,最好的方式就是從官方的快速上手文檔開(kāi)始(文檔的網(wǎng)址可以在文末掃描愛(ài)麗絲老師的二維碼領(lǐng)?。┦褂霉俜綔?zhǔn)備好的示例項(xiàng)目

  • 接下來(lái)我們先通過(guò)示例項(xiàng)目掌握HybridCLR熱更新的總體原理和流程,當(dāng)你真正的理解它以后,要用到自己的項(xiàng)目里面時(shí)就可以把示例項(xiàng)目里的一些多余的東西去掉,再?gòu)念^搭建

  • 在官方文檔中點(diǎn)擊快速開(kāi)始欄中的hybridclr_trial示例項(xiàng)目鏈接,前往GitHub復(fù)制示例項(xiàng)目源碼

  • 想要在GitHub里復(fù)制源碼,必須要安裝兩個(gè)軟件:Git和TortoiseGit

    • Git是一個(gè)命令行工具,TortoiseGit就相當(dāng)于Git的外殼,把這些東西裝了以后你才能夠從GitHub網(wǎng)站上下載并克隆源碼

認(rèn)識(shí)HybridCLR

init_local_il2cpp_data.bat

  • 在下載的HybridCLR項(xiàng)目源碼中點(diǎn)擊HybridCLRData文件夾

  • 右鍵HybridCLRData文件夾中的init_local_il2cpp_data.bat文件,選擇編輯

  • init_local_il2cpp_data.bat是一個(gè)批處理文件,什么是批處理文件呢?

    • 它其實(shí)就是一段代碼,這段代碼就像我們寫(xiě)的程序一樣,可以一行一行執(zhí)行,也有if else,也有for循環(huán)

  • 在打開(kāi)的文本編輯器中設(shè)置Unity版本為2021.3.1(這個(gè)示例項(xiàng)目能夠支持的Unity版本只有兩個(gè):2020.3.33和2021.3.1,本文使用的Unity版本為2021.3.1)

  • 指定IL2CPP的官方原始代碼所在目錄

  • 因?yàn)镠ybridCLR要基于IL2CPP的原始源碼做一些修改,而且定位到這個(gè)目錄以后它也能找到跟這個(gè)目錄相關(guān)的一些目錄,下圖就是我電腦上的IL2CPP的官方原始代碼所在目錄

  • HybridCLR修改的源碼都放在這個(gè)目錄中的libil2cpp文件夾中,這個(gè)文件夾里存放的全部都是一些以.cpp后綴結(jié)尾的文件,熟悉C++的同學(xué)就知道這就是C++的源碼,IL2CPP是開(kāi)源的,源碼都能看到,所以HybridCLR的作者可以基于源碼去做修改

  • 定位到IL2CPP的官方原始代碼所在目錄后還可以順著找到MonoBleedingEdge文件夾

  • 這個(gè)文件夾里存放的是一些命令行小程序,這些小程序并不能直接執(zhí)行,必須載入到Mono里執(zhí)行,大家在學(xué)習(xí)HybridCLR時(shí)可以把這個(gè)批處理程序好好看一看,本文只是對(duì)幾個(gè)比較重要的點(diǎn)進(jìn)行講解,其中的一些細(xì)節(jié)還需要讀者自己學(xué)習(xí)

  • 配置完init_local_il2cpp_data.bat文件后雙擊執(zhí)行,init_local_il2cpp_data.bat文件在執(zhí)行時(shí)會(huì)用Git命令下載HybridCLR的源碼倉(cāng)庫(kù)和IL2CPP的修改版本

  • init_local_il2cpp_data.bat里還有一個(gè)LocalIl2cpp的目錄,它的作用是什么呢?

  • 替換Unity里的IL2CPP源碼最原始的方法就是將下載的ilbil2cpp文件夾復(fù)制到Unity的IL2CPP目錄中覆蓋掉原始的libil2cpp文件夾

  • 但是作者利用了Unity里的環(huán)境變量特性,使Unity在啟動(dòng)以后會(huì)把剛才下載的修改過(guò)的IL2CPP目錄設(shè)置成IL2CPP源碼所在的目錄,這樣Unity就會(huì)從這個(gè)目錄里讀取IL2CPP的源碼來(lái)進(jìn)行打包

    • Unity在打包時(shí)就是通過(guò)讀IL2CPP庫(kù)里的源碼,利用這些源碼來(lái)進(jìn)行C#到C++的轉(zhuǎn)換,轉(zhuǎn)換完了以后形成機(jī)器指令,放到Unity里進(jìn)行執(zhí)行

init_local_il2cpp_data.bat文件的詳細(xì)介紹可以參考文末完整視頻

組織結(jié)構(gòu)介紹

  • 如果你在前面沒(méi)有修改并執(zhí)行bat文件,那么你使用Untiy打開(kāi)示例項(xiàng)目時(shí)控制臺(tái)上就會(huì)有一些報(bào)錯(cuò),如果你把前置工作做好了,那么你的項(xiàng)目就是完整無(wú)錯(cuò)的

  • 下面我們來(lái)解釋一下HybridCLR示例項(xiàng)目工程的組織結(jié)構(gòu)是什么樣的

  • HotFix和HotFix2文件夾是示例項(xiàng)目的熱更工程,它們的作用我們會(huì)在后面介紹

  • Editor文件夾的作用是用來(lái)為打包做一些配置

  • 如果你想要體驗(yàn)一下HybridCLR的熱更新,就需要打開(kāi)Scenes文件夾

  • StreamingAssets文件夾則是用于存放打包以后的資源

快速掌握HybridCLR熱更新

  • 點(diǎn)擊打開(kāi)并運(yùn)行Senens文件夾中的Main場(chǎng)景

  • 直接運(yùn)行Main場(chǎng)景會(huì)出現(xiàn)報(bào)錯(cuò)(如上圖),第一段話(huà)的意思是場(chǎng)景已經(jīng)被加載了,第二段的意思則是要在程序啟動(dòng)時(shí)加載common包

    • common包在程序結(jié)構(gòu)中相當(dāng)于是熱更程序集,類(lèi)似于剛才介紹的HotFix跟HotFix2

  • 第三段話(huà)的意思是下載出錯(cuò)了,這個(gè)問(wèn)題跟網(wǎng)絡(luò)沒(méi)有什么關(guān)系,只是沒(méi)有找到common包

    • common包里存放的是HotFix和HotFix2這兩個(gè)程序集,前面也講過(guò)程序也是一種資源,并不是只有模型貼圖這些才算是資源

  • 所以這個(gè)報(bào)錯(cuò)是因?yàn)闆](méi)有資源包所引發(fā)的,要解決這個(gè)問(wèn)題就需要進(jìn)行打包

  • 點(diǎn)擊HybridCLR菜單欄中的Build,選擇Win64進(jìn)行打包(第一次打出的資源包就是我們的首包)

  • 打完包以后,點(diǎn)擊資源包里HybridCLRTrial.exe運(yùn)行就可以看到如下畫(huà)面

  • 來(lái)看一看它的輸出內(nèi)容

    • 第一段語(yǔ)句是提示場(chǎng)景被加載,第二段語(yǔ)句則是提示加載了common包

    • 下圖中被框選的三段語(yǔ)句是HybridCLR的一些底層實(shí)現(xiàn),它的作用是補(bǔ)充一些元數(shù)據(jù),也可以理解為補(bǔ)充一些數(shù)據(jù)類(lèi)型的信息

  • 下圖中被黃色標(biāo)注的語(yǔ)句是比較重要的:hello, HybridCLR.prefab

    • 它的內(nèi)部實(shí)現(xiàn)機(jī)制是創(chuàng)建了一個(gè)預(yù)制體,然后通過(guò)預(yù)制體加載一個(gè)腳本

  • 下面我們就要對(duì)這個(gè)預(yù)制體加載的腳本做熱更新

LoadDLL源碼解析

  • 在做熱更新之前我先帶大家看一看HybridCLR的源碼是什么樣的

    • 主場(chǎng)景在運(yùn)行時(shí)會(huì)執(zhí)行LoadDll對(duì)象的LoadDll腳本

  • LoadDll腳本在運(yùn)行時(shí)會(huì)啟動(dòng)DownLoadDlls協(xié)程下載DLL,下載完了以后會(huì)執(zhí)行onDownLoadDll回調(diào)函數(shù),也就是執(zhí)行StartGame

  • StartGame會(huì)調(diào)用LoadGameDll方法加載DLL程序集

  • LoadGameDll方法在執(zhí)行時(shí)會(huì)獲取common資源包,然后從資源包里加載兩個(gè)程序集:HotFix.dll和HotFix2.dll,這兩個(gè)dll就是之前介紹的HotFix、HotFix2文件夾

  • 如果你在項(xiàng)目中定義了HotFix、HotFix2這兩個(gè)腳本目錄,并在這兩個(gè)腳本目錄中創(chuàng)建了ASMDEF文件,那么這兩個(gè)文件夾就會(huì)生成兩個(gè)程序集,經(jīng)過(guò)HybridCLR打包,這兩個(gè)程序集就會(huì)被打包到common包里

  • 這兩個(gè)程序集里有哪些內(nèi)容呢?

    • 其實(shí)就是這兩個(gè)文件夾里的腳本,示例項(xiàng)目中HotFix、HotFix2只有兩個(gè)腳本:PrintHello腳本和App腳本

    • App腳本因?yàn)楦疚膬?nèi)容沒(méi)什么關(guān)系,所以就不在這里專(zhuān)門(mén)介紹了,PrintHello的作用是在Main場(chǎng)景中打印hello,HybridCLR.prefab

  • common包里除了這兩個(gè)程序集還有一個(gè)HotUpdatePrefab游戲?qū)ο?,它存放在示例?xiàng)目的Prefabs文件夾中,這個(gè)預(yù)制體也是通過(guò)腳本打包的,在項(xiàng)目運(yùn)行時(shí)HotUpdatePrefab會(huì)被LoadGameDll加載并進(jìn)行實(shí)例化,形成testPrefab

熱更測(cè)試

  • HotUpdatePrefab上里面掛載了PrintHello腳本,示例項(xiàng)目在運(yùn)行時(shí)會(huì)實(shí)例化HotUpdatePrefab,HotUpdatePrefab上的PrintHello腳本就會(huì)在Main場(chǎng)景中打印hello,HybridCLR.prefab(如下圖)

  • 既然要測(cè)試熱更,那么我就在PrintHello腳本里加點(diǎn)東西(如下圖),因?yàn)槲覀兊臋C(jī)構(gòu)名叫優(yōu)夢(mèng)創(chuàng)客,所以在hello, HybridCLR字符串中添加了優(yōu)夢(mèng)創(chuàng)客作為標(biāo)識(shí)

  • 保存PrintHello腳本后回到Unity里面,打一個(gè)Win64位的資源包

  • 打開(kāi)StreamingAssets目錄找到剛才打包的資源并復(fù)制build_init、common文件

  • 將這些資源復(fù)制到剛才之前第一次打的common包中,替換原本的build_init、common文件

  • 替換完成后點(diǎn)擊首包里的HybridCLRTrial.exe運(yùn)行,就可以看到畫(huà)面下方的hello,Hybrid后面多了優(yōu)夢(mèng)創(chuàng)客幾個(gè)字,這代表熱更成功了

  • HybridCLR快速上手就講到這里,下面為大家整理一下思路和細(xì)節(jié)

  • HybridCLR打包流程

    • HybridCLR所有的打包功能都是集中在HybridCLR菜單下

    • 正常的打包你可能還需要理解它的打包流程,但HybridCLR提供了傻瓜打包的方式,只要點(diǎn)擊Build里的Win64就可以直接把首包打好,中間的過(guò)程是:打包形成裁剪信息,然后利用裁剪信息打包熱更dll,這樣就可以獲得熱更所需的所有信息

  • 首包打完以后,再啟動(dòng)游戲時(shí),主場(chǎng)景會(huì)加載熱更代碼。加載完成后就會(huì)進(jìn)入到熱更代碼的執(zhí)行流程里,所以在之前的LoadDll腳本里會(huì)有這么幾個(gè)步驟

    • 第一步,啟動(dòng)下載

    • 第二步,下載完了以后啟動(dòng)游戲,啟動(dòng)游戲分為兩個(gè)步驟:加載dll、運(yùn)行主程序

      • LoadDll腳本會(huì)通過(guò)LoadGameDll方法加載程序集

      • 加載完成后LoadDll腳本就會(huì)執(zhí)行主程序,主程需會(huì)通過(guò)反射的方式加載App數(shù)據(jù)類(lèi)型,然后調(diào)用App類(lèi)的Main方法(如下圖)

  • App的Main方法在調(diào)用時(shí)會(huì)測(cè)試泛型的一些功能是否正常,然后打印一段文字,創(chuàng)建一個(gè)HotFix2對(duì)象,并為它添加一個(gè)CreateByCode組件

  • CreateByCode組件也是可以進(jìn)行熱更的,它的內(nèi)容如下,它和前面的PrintHello方法一樣,只是在運(yùn)行畫(huà)面中打?。骸斑@個(gè)腳本是通過(guò)代碼AddComponent直接創(chuàng)建的”

  • 你可以采用之前熱更PrintHello腳本的方法來(lái)對(duì)CreateByCode組件進(jìn)行熱更,首先為CreateByCode組件要打印的字段后添加優(yōu)夢(mèng)創(chuàng)客標(biāo)志

  • 然后進(jìn)行打包,復(fù)制打包后資源里的build_init、common文件,替換第一次打包之前打好的common包中的build_init、common文件,然后執(zhí)行首包里的HybridCLRTrial.exe,效果下圖所示

性能評(píng)測(cè)

  • 上圖中的柱子并不是代表柱子越長(zhǎng)性能越好,而是柱子越短運(yùn)行Unity花的時(shí)間越少

    • 藍(lán)色的柱子代表Xlua、ToLua熱更方案,可以看出Xlua和ToLua的性能最差的,在特定的情況下可能會(huì)好一點(diǎn)

    • 綠色的柱子代表IlRuntim熱更方案,ILRuntime的性能測(cè)試看上去或許會(huì)比大家想象中的要好一些,這是因?yàn)榇蠹疫^(guò)去對(duì)ILRuntime的性能測(cè)試都有一個(gè)誤解,就是你根本沒(méi)有打開(kāi)ILRuntime性能最高的模式,這就像兩個(gè)人比高矮一樣,一個(gè)站在凳子上面,一個(gè)站在平地上,這是沒(méi)法比的,所以ILRuntime的性能是比傳統(tǒng)的Xlua、ToLua要好的

    • 黃色的柱子代表原生代碼,因?yàn)樵a在運(yùn)行時(shí)沒(méi)有任何額外負(fù)擔(dān),所以原生代碼在比較里是最快的

    • 最后的柱子就是HybridCLR熱更新方案,可以看出HybridCLR的性能已經(jīng)跟傳統(tǒng)方式不在一個(gè)級(jí)別上了,性能與原生編程方式相當(dāng),為什么會(huì)這樣呢?

    • 因?yàn)镠ybridCLR根本沒(méi)有虛擬機(jī),而且它是把代碼編譯成C++,C++的性能本來(lái)就比C#要高,這就是它熱更優(yōu)勢(shì)的來(lái)源

  • 內(nèi)存占用

    • Xlua或ToLua每個(gè)值類(lèi)型對(duì)象的大小都比ILRuntime要大,HybridCLR是最小的,幾乎跟原生的C#或C++代碼等同

    • Xlua和ToLua的引用類(lèi)型也是最差的,ILRuntime局中,HybridCLR是最好的

進(jìn)階與總結(jié)

注意事項(xiàng)

  • 編譯時(shí)的腳本后臺(tái)必須選IL2CPP,具體原因可以看我們的《Unity熱更新那些事》,只有這種方式才能夠使用HybridCLR的熱更功能

  • Api Compatibility Level 要選擇 .NET 4.x

  • C++ Compiler Configuration 不要選擇Debug,要選擇Release版本,因?yàn)镽elease版本的性能要比Debug高不少

寫(xiě)在最后

  • 更多學(xué)習(xí)資源請(qǐng)加QQ:1517069595或WX:alice17173獲?。ㄆ髽I(yè)級(jí)性能優(yōu)化/熱更新/Shader特效/服務(wù)器/商業(yè)項(xiàng)目實(shí)戰(zhàn)/每周直播/一對(duì)一指導(dǎo))

  • 點(diǎn)贊、關(guān)注、分享可免費(fèi)獲得配套學(xué)習(xí)資源

  • 詳細(xì)內(nèi)容可參考下方完整視頻


一小時(shí)極速掌握HybridCLR熱更新的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
亳州市| 隆回县| 扶绥县| 迁安市| 沅陵县| 钟祥市| 略阳县| 罗江县| 通城县| 淳安县| 宜春市| 垫江县| 保康县| 高尔夫| 红桥区| 山东| 门头沟区| 怀仁县| 江西省| 博兴县| 宝丰县| 外汇| 渭源县| 大新县| 革吉县| 安远县| 宁德市| 鹤岗市| 页游| 新竹市| 内黄县| 秀山| 宁国市| 买车| 云龙县| 杭锦旗| 曲靖市| 台北县| 天台县| 扶风县| 新野县|