一.资源打包选项

在AssetBundle 打包过程中,有一个BuildAssetBundleOptions 枚举类型,通过设置不同的枚举参数,可以实现不同的压缩方式。 1.BuildAssetBundleOptions.None 使用LZMA 压缩算法进行压缩,打包后的资源体积最小。 [

](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101902-300x158.png)](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101902.png) **2.BuildAssetBundleOptions.UncompressedAssetBundle** 不使用压缩方式,打包后的AssetBundle 体积最大,但是加载速度最快。 [![](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101901-300x181.png)](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101901.png) **3.BuildAssetBundleOptions.ChunkBasedCompression** 使用LZ4 压缩算法进行压缩,打包后的AssetBundle 体积和加载速度介于二 者之间。 [![](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101903-300x144.png)
](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101902-300x158.png)](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101902.png) **2.BuildAssetBundleOptions.UncompressedAssetBundle** 不使用压缩方式,打包后的AssetBundle 体积最大,但是加载速度最快。 [![](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101901-300x181.png)](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101901.png) **3.BuildAssetBundleOptions.ChunkBasedCompression** 使用LZ4 压缩算法进行压缩,打包后的AssetBundle 体积和加载速度介于二 者之间。 [![](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101903-300x144.png)
代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class test
{
//LZMA压缩
[MenuItem(“Build/AssetBundle(LZMA压缩)”)]
static void Build01()
{
string path = Application.dataPath + “/AssetBundless”;

    BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);

    Debug.Log("LZMA压缩打包成功");
}

//无压缩
\[MenuItem("Build/AssetBundle(无压缩)")\]
static void Build02()
{
    string path = Application.dataPath + "/AssetBundless";

    BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.UncompressedAssetBundle, BuildTarget.StandaloneWindows64);

    Debug.Log("无压缩打包成功");
}

//LZ4压缩
\[MenuItem("Build/AssetBundle(LZ4压缩)")\]
static void Build()
{
    string path = Application.dataPath + "/AssetBundless";

    BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.StandaloneWindows64);

    Debug.Log("LZ4压缩打包成功");
}

}

二.manifest 文件

AssetBundle 打包完毕后的资源包,由两部分组成。 一:资源打包出来的AssetBundle 文件; 二:AssetBundle 文件配套的manifest 文本文件。 1.meta文件: .meta 文件不属于AssetBundle 打包后的产物。 在Unity3D 环境内,每个资源都会自动生成一个同名同后缀的.meta 文件。这个文件用于存储该资源的一些基本信息。 比如:“创建时间,版本ID,AssetBundle 名称,后缀等信息”。 找到player的prefab文件,打开它的meta文件,如图所示,可以看到meta记录了player被打包的名字和后缀。 [

](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101906-300x213.png)](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101906.png) **2.manifest 文件介绍** manifest 文件和.meta 文件作用类似。 manifest 文件是用于专门存储打包后的AssetBundle 文件的基本信息的。 主要包含以下信息: CRC 校验码:类似于MD5,用于计算出该资源的一个特殊信息标示; ClassTypes 列表:当前资源关联使用到了Unity 中的哪些类,这些类是以编号索引的形式存在的,每个编号都对应一个类文件。 player.ab.manifest: [![](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101904-217x300.png)](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101904.png) **3.目录manifest 文件** 在我们打包出来的AssetBundle 文件中,有一个特殊的manifest 文件。 这个manifest 文件是和用于存储AssetBundle 的文件夹同名的文件,且只在根文件夹下有唯一的一个。 这个manifest 文件可以称之为“AssetBundle 目录文件”,因为这个文件中内存储了打包出来的所有的AssetBundle 的文件的索引信息。 通过这个目录文件,可以找到所有的AssetBundle 文件,可以看到图中有player和plane的Name. [![](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101905-282x300.png)
](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101906-300x213.png)](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101906.png) **2.manifest 文件介绍** manifest 文件和.meta 文件作用类似。 manifest 文件是用于专门存储打包后的AssetBundle 文件的基本信息的。 主要包含以下信息: CRC 校验码:类似于MD5,用于计算出该资源的一个特殊信息标示; ClassTypes 列表:当前资源关联使用到了Unity 中的哪些类,这些类是以编号索引的形式存在的,每个编号都对应一个类文件。 player.ab.manifest: [![](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101904-217x300.png)](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101904.png) **3.目录manifest 文件** 在我们打包出来的AssetBundle 文件中,有一个特殊的manifest 文件。 这个manifest 文件是和用于存储AssetBundle 的文件夹同名的文件,且只在根文件夹下有唯一的一个。 这个manifest 文件可以称之为“AssetBundle 目录文件”,因为这个文件中内存储了打包出来的所有的AssetBundle 的文件的索引信息。 通过这个目录文件,可以找到所有的AssetBundle 文件,可以看到图中有player和plane的Name. [![](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101905-282x300.png)