>原理
现在的手游安装有几种方式。一种是安装的时候就把程序和资源安装到本地。另外一种是只安装程序和少量的必要资源,然后在启动的时候再把缺少的资源下载完整。手游一般不建议和传统页游一样,在运行过程中加载资源,那样做会导致用户体验会比较差些。上述的两种安装模式,在更新资源上本质都是相同的。都是比较服务器资源的版本和本地资源的版本,以确定哪些资源要下载(包括需要更新的和新增的)。
>流程
1、资源打包
资源打包之前,要先规划好资源之间的相互依赖关系。把一些共性的东西抽取出来,尽量减少不必要的耦合。一些比较好的做法有,所有物件尽可能做成Prefab,场景上的东西越少越好,“一切都是动态加载”。关于资源打包,我推荐使用Assetbundle进行文件打包,当然一些json配置表之类的,其实可以不需要使用Assetbundle打包。
Assetbundle打包的流程在unity5.4之后已经非常简单,下面给出打包的一些流程细节和代码:
①打包代码
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面板下,看到新增的选项如下图:
②打包的细节流程
这些完成后点击上图面板上的AssetBundle下的Bulid AssetBundles,此时会将生成好的AB包(Assetbundle包以下简称AB包)存到我代码中设置的文件夹下。如下图:
2、生成版本MD5文件
关于文件的MD5,这里就不详细描述了。大家可以简单理解它为一个文件的状态标记。如果文件有更改,那么它的md5一定是改变的,单纯的移动文件是不会更改的。md5验证还可以起到安全验证的作用,保证本地文件不被篡改。举个例子,我们经常从网上上下载软件时,一般都会给出一个md5值,你下载后,对比一下已下载文件的md5值,就可以知道文件有没有被篡改。在版本发布时,我们需要对所有打包好的文件计算md5值,然后保存在一个配置文件中。关于这部分的工作,我之前写过一个可视化小工具(http://pan.baidu.com/s/1hswuwr6 密码:i8ll),现在分享给大家。
下载后可以得到一个可执行的exe,点击这个exe之后窗口如下:
在窗口中输入需要更新的文件夹的路径,点击生成即可,我的需要更新的文件在Assets>StreamingAssets>UpdateRes下。