>原理
現(xiàn)在的手游安裝有幾種方式。一種是安裝的時候就把程序和資源安裝到本地。另外一種是只安裝程序和少量的必要資源,然后在啟動的時候再把缺少的資源下載完整。手游一般不建議和傳統(tǒng)頁游一樣,在運行過程中加載資源,那樣做會導(dǎo)致用戶體驗會比較差些。上述的兩種安裝模式,在更新資源上本質(zhì)都是相同的。都是比較服務(wù)器資源的版本和本地資源的版本,以確定哪些資源要下載(包括需要更新的和新增的)。
>流程
1、資源打包
資源打包之前,要先規(guī)劃好資源之間的相互依賴關(guān)系。把一些共性的東西抽取出來,盡量減少不必要的耦合。一些比較好的做法有,所有物件盡可能做成Prefab,場景上的東西越少越好,“一切都是動態(tài)加載”。關(guān)于資源打包,我推薦使用Assetbundle進行文件打包,當(dāng)然一些json配置表之類的,其實可以不需要使用Assetbundle打包。
Assetbundle打包的流程在unity5.4之后已經(jīng)非常簡單,下面給出打包的一些流程細節(jié)和代碼:
①打包代碼
using UnityEngine;
using System.Collections;
using UnityEditor;
/// <summary>
/// 將這個腳本放在Editor文件夾下,沒有就新建一個
/// </summary>
public class HueyAssetBundle : MonoBehaviour {
[MenuItem("AssetBundle/Bulid AssetBundles")]
static void BuildAssetBundles()
{
//"Assets/StreamingAssets/UpdateRes"這個是打好的包在的位置
BuildPipeline.BuildAssetBundles("Assets/StreamingAssets/UpdateRes", BuildAssetBundleOptions.CollectDependencies, BuildTarget.Android);
}
}
這個腳本放在Editor文件夾下之后會在unity面板下,看到新增的選項如下圖:

②打包的細節(jié)流程


這些完成后點擊上圖面板上的AssetBundle下的Bulid AssetBundles,此時會將生成好的AB包(Assetbundle包以下簡稱AB包)存到我代碼中設(shè)置的文件夾下。如下圖:

2、生成版本MD5文件
關(guān)于文件的MD5,這里就不詳細描述了。大家可以簡單理解它為一個文件的狀態(tài)標記。如果文件有更改,那么它的md5一定是改變的,單純的移動文件是不會更改的。md5驗證還可以起到安全驗證的作用,保證本地文件不被篡改。舉個例子,我們經(jīng)常從網(wǎng)上上下載軟件時,一般都會給出一個md5值,你下載后,對比一下已下載文件的md5值,就可以知道文件有沒有被篡改。在版本發(fā)布時,我們需要對所有打包好的文件計算md5值,然后保存在一個配置文件中。關(guān)于這部分的工作,我之前寫過一個可視化小工具(http://pan.baidu.com/s/1hswuwr6 密碼:i8ll),現(xiàn)在分享給大家。
下載后可以得到一個可執(zhí)行的exe,點擊這個exe之后窗口如下:

在窗口中輸入需要更新的文件夾的路徑,點擊生成即可,我的需要更新的文件在Assets>StreamingAssets>UpdateRes下。