Unity3D熱更新全書-何謂熱更新,爲什麼熱更新,如何熱更新

原地址:http://www.cnblogs.com/crazylights/p/3884650.htmlhtml

先來讚歎一下中文,何謂爲什麼如何,寫完才發現這三個詞是如此的有規律。ios

爲什麼讚歎中文?由於這是一篇針對新手程序員的文字,是一節語文課。程序員

而後來作一下說文解字,也就是c#

何謂熱更新

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

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

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

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

好比Windows 不重啓的前提下安裝補丁翻譯

好比Http服務器在不重啓的前提下換掉一個文件htm

那麼對於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邏輯熱更新而生。

相關文章
相關標籤/搜索