前面鋪墊了這麼久,終於要開始寫熱更新了。html
Unity遊戲熱更新包含兩個方面,一個是資源的更新,一個是腳本的更新。java
資源更新是Unity原本就支持的,在各大平臺也都能用。而腳本的熱更新在iOS平臺則是不被容許的(除了Lua)。apache
爲了讓一套代碼能在各個平臺都支持熱更,將遊戲的業務邏輯全面Lua化,是一種解決方法。這也是ToLua在作的事。windows
關於Unity熱更與平臺的關係 能夠閱讀陳嘉棟大佬的文章:誰偷了個人熱更新?Mono,JIT,iOS瀏覽器
一、熱更新的簡單理解
手機App的更新方式有兩種。tomcat
第一種是全量更新。每一次App更新,開發者都須要上傳一個完整的軟件包(apk、ipa)到分發平臺,而用戶也須要下載一個完整的新軟件包來從新安裝。這對用戶來講很不友好,對開發者更不友好。服務器
由於開發者上傳到平臺後,還須要等待平臺的漫長審覈,特別是iOS平臺(短則兩天,長則十天半月),非常影響遊戲的版本計劃。網絡
所以第二種更新方式就出來了。oracle
第二種是增量更新,每次更新,開發者上傳本次更新的內容到資源服務器上,用戶的App客戶端也只用更新本次新增內容就行,無需從新下載App。框架
看似很完美的方式,而且在端游上也是成熟的操做,可是這樣的方式由於更新內容不可控,被蘋果給禁止了(Lua是蘋果留的一個口子)。
二、熱更新原理詳解
(由於我我的對此框架的理解還僅限於使用階段,並不能很好的闡述其原理。爲避免誤導,現直接將我學習此框架時所看的文章對於此原理的解釋直接引用過來。)
原文連接:https://zhuanlan.zhihu.com/p/21386682
如下兩條分隔線之間的內容都是引用:
以下圖所示,Unity3D的熱更新會涉及3個目錄。
熱更新的過程圖
遊戲資源目錄:裏面包含Unity3D工程中StreamingAssets文件夾下的文件。安裝遊戲以後,這些文件將會被一字不差地複製到目標機器上的特定文件夾裏,不一樣平臺的文件夾不一樣,以下所示(上圖以windows平臺爲例)
Mac OS或Windows:Application.dataPath + "/StreamingAssets"; IOS: Application.dataPath + "/Raw"; Android:jar:file://" + Application.dataPath + "!/assets/";數據目錄:因爲「遊戲資源目錄」在Android和IOS上是隻讀的,不能把網上的下載的資源放到裏面,因此須要創建一個「數據目錄」,該目錄可讀可寫。第一次開啓遊戲後,程序將「遊戲資源目錄」的內容複製到「數據目錄中」(步驟1,這個步驟只會執行一次,下次再打開遊戲就不復制了)。遊戲過程當中的資源加載,都是從「數據目錄」中獲取、解包(步驟3)。不一樣平臺下,「數據目錄」的地址也不一樣,LuaFramework的定義以下:
Android或IOS:Application.persistentDataPath + "/LuaFramework" Mac OS或Windows:c:/LuaFramework/ 調試模式下:Application.dataPath + "/StreamingAssets/"注:」LuaFramework」和」StreamingAssets」由配置決定,這裏取默認值網絡資源地址:存放遊戲資源的網址,遊戲開啓後,程序會從網絡資源地址下載一些更新的文件到數據目錄。
這些目錄包含着不一樣版本的資源文件,以及用於版本控制的files.txt。Files.txt的內容以下圖所示,裏面存放着資源文件的名稱和md5碼。程序會先下載「網絡資源地址」上的files.txt,而後與「數據目錄」中文件的md5碼作比較,更新有變化的文件(步驟2)。
files.txt
LuaFramework的熱更新代碼定義在Assets\LuaFramework\Scripts\Manager\GameManager.cs,真正用到項目時可能還需少量改動。
我的理解:
遊戲資源目錄: 是遊戲的安裝目錄。若是在是Unity裏直接運行,應該指的就是Assset/StreamingAssets目錄;
若是是打包成exe程序,應該是exe程序裏的某個目錄(猜的,沒驗證)
數據目錄:由於遊戲資源目錄不可寫,所以程序又額外開闢的一個能讀寫的目錄,就是數據目錄。
網絡資源地址:這個說的就是服務器資源目錄了。
從上文了解下,要實現熱更新功能,一個用於存放網絡資源的服務器是必須的。我這裏選用Tomcat來作服務器(任何其它能提供網絡訪問服務的服務器均可以)。
下載並安裝Tomcat
1)下載Tomcat
版本:Tomcat9.0 windows平臺64位版,下載地址:https://tomcat.apache.org/download-90.cgi
2)下載JDK
jdk版本1.8或以上(這個版本根據Tomcat的需求來,若是使用其它版本Tomcat,則可能須要其它版本的jdk)
下載地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
3)環境變量配置
Tomcat下載以後,無需安裝,解壓到指定目錄便可。
JDK下載以後,執行安裝程序,直到結束。
爲了讓Tomcat能正常運行,須要配置環境變量,我配置了以下四項。
用戶變量里加這兩個:
JAVA_HOME:F:\ProgramsDirectory\Java\jdk1.8
CATALINA_HOME: I:\apache-tomcat-9.0.22
系統變量Path裏添加這兩個目錄:
F:\ProgramsDirectory\Java\jdk1.8\bin
I:\apache-tomcat-9.0.22\bin
請參照本身的實際目錄進行調整,這裏不提供詳細的配置方法,我這個也不是標準配法。有問題請善用搜索。
4)運行Tomcat
環境變量配置完成以後,執行apache-tomcat-9.0.22\bin目錄下的startup.bat文件。
看到http-nio-8080之類的字樣,表示服務器已經運行,以下圖。
(我這裏不知道爲啥亂碼了,明明沒有中文及空格等不合規目錄,不過不影響使用)
在瀏覽器裏輸入:http://localhost:8080/ ,看到以下頁面,表示Tomcat啓動成功。
本篇就講到這裏,後邊就要講怎麼實現代碼及資源更新了。
晚安!