Unity3D熱更新全書-何謂熱更新,為何熱更新,如何熱更新


首先來贊嘆一下中文,何謂為何如何,寫完才發現這三個詞是如此的有規律。

為何贊嘆中文?因為這是一篇針對新手程序員的文字,是一節語文課。

然后來做一下說文解字,也就是

何謂熱更新

熱更新,每個程序員一聽就明白,但是它語出何處,究竟表達了什么含義,到底代表了什么,對技術有什么要求,對經驗相對較少的程序員來說可能就有一層神秘面紗了。

熱更新,是對hot update 或者 hot fix的翻譯,計算機術語,表示在不停機的前提下對系統進行更改。

hot 就是熱,機器運行會發燙,hot就是不停機的意思。

熱更新,是個很形象的詞,機器燙的時候更新,開着更新。

比如Windows 不重啟的前提下安裝補丁

比如Http服務器在不重啟的前提下換掉一個文件

那么對於Unity3D來說,何謂熱更新?

額……這個真相實在是不想講出來,因為很多時候,這個詞都用錯了。

Unity3D是一個客戶端工具,用戶是否重啟客戶端,根本是我們不關心的問題。

很多時候我們用着熱更新這個詞匯,卻不需要真的熱更新。

只有少部分游戲,游戲資源在玩的過程中邊玩邊下,不重啟的前提下變更了資源。

我們不需要用戶不重啟客戶端就能實現資源代碼的更新,我們需要的是用戶重啟客戶端能實現資源代碼的更新。

 

讓我們暫時放過這個我們的需求連詞匯都用錯了這個基本事實,來總結一下何謂Unity3D熱更新

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

為何熱更新

熱更新,能夠縮短用戶取得新版客戶端的流程,改善用戶體驗

沒有熱更新:

pc用戶:

下載客戶端->等待下載->安裝客戶端->等待安裝->啟動->等待加載->玩

手機用戶:

商城下載APP->等待下載->等待安裝->啟動->等待加載->玩

有了熱更新

pc用戶:

啟動->等待熱更新->等待加載->玩

有獨立loader的pc用戶:

啟動loader->等待熱更新->啟動游戲->等待加載->玩

手機用戶:

啟動->等待熱更新->等待加載->玩

通過對比就可以看出,有沒有熱更新對於用戶體驗的影響還是挺大的,主要就是省去用戶自行更新客戶端的步驟。

為了方便用戶、留住用戶、進而從留住的用戶身上賺到錢,熱更新如今已經成為了大部分游戲的標配功能。

如果你的游戲不標配這個功能,那么競爭力就會少一些,無論是主動還是被動,無論是方便用戶還是被標配,你都必須面對熱更新這個課題,雖然這個詞用錯了。

如何熱更新

熱更新是為了讓用戶獲得資源和代碼的變更,這里的代碼不是指真的代碼,用戶不要代碼,他要的是變化的業務邏輯。實現變更的具體過程是首先查並更新本地資源和業務邏輯,如需下載則下載。然后啟動時資源均從本地資源創建,業務邏輯從本地執行。

Unity3D提供了一種機制AssetBundle,可以滿足所有資源的比對下載加載,但是assetbundle每平台分別打包對於多平台項目而言比較麻煩,是一個明顯的短板,而且assetbundle不能脫離unityeditor產生,也是一個麻煩,項目大了話,多人合作,把所有資源都放入assetbundle明顯降低效率。

對於代碼,Unity3D是不提供變更機制的。但是Unity3D執行核心是Mono,也就是dotnet,dotnet有一種符號反射機制,可以直接加載一個dll,然后反射出其中的類型進行操作。符號和反射的主要問題是有些平台不能使用,比如ios wp8。另外dotnet有一種emit機制,可以運行時調用編譯器對代碼進行編譯,他的問題也是平台不支持。

以上兩點是Unity3D免費贈送給你的幫助

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

資源下載模塊

當assetbundle不能滿足需要時,我們需要自己建立檢查更新需要則下載的機制,也就是資源下載模塊

這個資源下載模塊應該有一個版本生成工具,我們將一組文件生成一個一個版本待下載。

有一個Unity3D用的下載模塊,下載模塊會首先檢查服務器上的版本信息,和本地信息做比對,需要的文件則下載。

資源加載模塊

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

資源加載模塊負責從下載的文件中加載出資源。

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

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

一種是游戲第一次啟動時,將包內文件全部copy到下載文件

腳本模塊

當符號反射不能滿足需求時,業務邏輯更新就只有套用腳本語言這一條路,也就是腳本模塊

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

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

unity有了很多lua的綁定庫,也有了unilua這樣的pure c#移植實現。

你還有一個選擇是C#Light/Evil,他是C#語法的,pure c#實現的一門新生腳本語言,就是為了Unity3D邏輯熱更新而生。


免責聲明!

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



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