UNITY3D 熱更新

何謂熱更新

Unity3D熱更新就是指:用戶重啟客戶端就能實(shí)現(xiàn)客戶端資源代碼更新的需求或者功能。

為何熱更新

熱更新,能夠縮短用戶取得新版客戶端的流程,改善用戶體驗(yàn)。

沒(méi)有熱更新:

pc用戶:

下載客戶端->等待下載->安裝客戶端->等待安裝->啟動(dòng)->等待加載->玩

手機(jī)用戶:

商城下載APP->等待下載->等待安裝->啟動(dòng)->等待加載->玩

有了熱更新

pc用戶:

啟動(dòng)->等待熱更新->等待加載->玩

有獨(dú)立loader的pc用戶:

啟動(dòng)loader->等待熱更新->啟動(dòng)游戲->等待加載->玩

手機(jī)用戶:

啟動(dòng)->等待熱更新->等待加載->玩

通過(guò)對(duì)比就可以看出,有沒(méi)有熱更新對(duì)于用戶體驗(yàn)的影響還是挺大的,主要就是省去用戶自行更新客戶端的步驟。

為了方便用戶、留住用戶、進(jìn)而從留住的用戶身上賺到錢(qián),熱更新如今已經(jīng)成為了大部分游戲的標(biāo)配功能。

如果你的游戲不標(biāo)配這個(gè)功能,那么競(jìng)爭(zhēng)力就會(huì)少一些,無(wú)論是主動(dòng)還是被動(dòng),無(wú)論是方便用戶還是被標(biāo)配,你都必須面對(duì)熱更新這個(gè)課題,雖然這個(gè)詞用錯(cuò)了。

如何熱更新

熱更新是為了讓用戶獲得資源和代碼的變更,這里的代碼不是指真的代碼,用戶不要代碼,他要的是變化的業(yè)務(wù)邏輯。實(shí)現(xiàn)變更的具體過(guò)程是首先查并更新本地資源和業(yè)務(wù)邏輯,如需下載則下載。然后啟動(dòng)時(shí)資源均從本地資源創(chuàng)建,業(yè)務(wù)邏輯從本地執(zhí)行。

Unity3D提供了一種機(jī)制AssetBundle,可以滿足所有資源的比對(duì)下載加載,但是assetbundle每平臺(tái)分別打包對(duì)于多平臺(tái)項(xiàng)目而言比較麻煩,是一個(gè)明顯的短板,而且assetbundle不能脫離unityeditor產(chǎn)生,也是一個(gè)麻煩,項(xiàng)目大了話,多人合作,把所有資源都放入assetbundle明顯降低效率。

對(duì)于代碼,Unity3D是不提供變更機(jī)制的。但是Unity3D執(zhí)行核心是Mono,也就是dotnet,dotnet有一種符號(hào)反射機(jī)制,可以直接加載一個(gè)dll,然后反射出其中的類(lèi)型進(jìn)行操作。符號(hào)和反射的主要問(wèn)題是有些平臺(tái)不能使用,比如ios wp8。另外dotnet有一種emit機(jī)制,可以運(yùn)行時(shí)調(diào)用編譯器對(duì)代碼進(jìn)行編譯,他的問(wèn)題也是平臺(tái)不支持。

以上兩點(diǎn)是Unity3D免費(fèi)贈(zèng)送給你的幫助

如果不能滿足你的需求,你就需要自己搞定三個(gè)模塊:

資源下載模塊

當(dāng)assetbundle不能滿足需要時(shí),我們需要自己建立檢查更新需要?jiǎng)t下載的機(jī)制,也就是資源下載模塊。

這個(gè)資源下載模塊應(yīng)該有一個(gè)版本生成工具,我們將一組文件生成一個(gè)一個(gè)版本待下載。

有一個(gè)Unity3D用的下載模塊,下載模塊會(huì)首先檢查服務(wù)器上的版本信息,和本地信息做比對(duì),需要的文件則下載。

資源加載模塊

然后需要建立自己的從下載保存在本地的文件中加載出資源的機(jī)制,也就是資源加載模塊。

資源加載模塊負(fù)責(zé)從下載的文件中加載出資源。

如果你希望游戲帶有一份初始資源文件,這里有兩種思路

一種是資源加載模塊直接提供從包內(nèi)文件和下載文件兩種加載路徑

一種是游戲第一次啟動(dòng)時(shí),將包內(nèi)文件全部copy到下載文件

腳本模塊

當(dāng)符號(hào)反射不能滿足需求時(shí),業(yè)務(wù)邏輯更新就只有套用腳本語(yǔ)言這一條路,也就是腳本模塊。

雖然dotnet世界里有很多腳本可以用 ironRuby ironPython,可是在unity這個(gè)特定環(huán)境下全部不可用。

你可以使用的一個(gè)選擇是lua,這個(gè)由魔獸世界采用作為界面腳本,從而紅遍整個(gè)游戲行業(yè),十年經(jīng)久不衰的腳本。

unity有了很多l(xiāng)ua的綁定庫(kù),也有了unilua這樣的pure c#移植實(shí)現(xiàn)。

你還有一個(gè)選擇是C#Light/Evil,他是C#語(yǔ)法的,pure c#實(shí)現(xiàn)的一門(mén)新生腳本語(yǔ)言,就是為了Unity3D邏輯熱更新而生。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容