AssetBundle作用
1、AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载;
2、AssetBundle自身保存着互相的依赖关系;
3、压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;
4、把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小;
压缩算法选择
None:使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。
UncompressedAssetBundle:不压缩,包大,加载快
ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。 注意使用LZ4压缩,可以获得可以跟不压缩想媲美的加载速度,而且比不压缩文件要小。
插件使用
1、打开配置窗口
在上方菜单中找到Tools->AssetBundle Browser
这里可以在ab包列表中右键新建ab包和整个文件夹的ab包,创建完成后可以直接在资源列表直接把资源拖到相应的ab包下,要想给ab包设置后缀名,必须要先给新建的ab包添加资源,然后直接重命名把后缀名添加就可以
2、打包ab 资源包
在窗口菜单Build中,设置打包平台,设置输出路径,默认输出路径在Assets 同级目录,选择压缩算法,然后直接点击下方Build就可以打包,等待打包完成后可以对打包的ab包进行加密,生成加密后的md5,以便更新ab包。
AssetBundle分组策略
1、逻辑实体分组
a,一个UI界面或者所有UI界面一个包(这个界面里面的贴图和布局信息一个包)
b,一个角色或者所有角色一个包(这个角色里面的模型和动画一个包)
c,所有的场景所共享的部分一个包(包括贴图和模型)
2、按照类型分组
所有声音资源打成一个包,所有shader打成一个包,所有模型打成一个包,所有材质打成一个包
3、按照使用分组
把在某一时间内使用的所有资源打成一个包。可以按照关卡分,一个关卡所需要的所有资源包括角色、贴图、声音等打成一个包。也可以按照场景分,一个场景所需要的资源一个包
文件校验
CRC MD5 SHA1 相同点: CRC、MD5、SHA1都是通过对数据进行计算,来生成一个校验值,该校验值用来校验数据的完整性。 不同点:
-
算法不同。CRC采用多项式除法,MD5和SHA1使用的是替换、轮转等方法;
-
校验值的长度不同。CRC校验位的长度跟其多项式有关系,一般为16位或32位;MD5是16个字节(128位);SHA1是20个字节(160位);
-
校验值的称呼不同。CRC一般叫做CRC值;MD5和SHA1一般叫做哈希值(Hash)或散列值;
-
安全性不同。这里的安全性是指检错的能力,即数据的错误能通过校验位检测出来。CRC的安全性跟多项式有很大关系,相对于MD5和SHA1要弱很多;MD5的安全性很高,不过大概在04年的时候被山东大学的王小云破解了;SHA1的安全性最高。
-
效率不同,CRC的计算效率很高;MD5和SHA1比较慢。
-
用途不同。CRC一般用作通信数据的校验;MD5和SHA1用于安全(Security)领域,比如文件校验、数字签名等。
使用此插件后,若是代码使用了UnityEditor的方式加载资源打包会报错
UnityEditor.AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(path);
解决方式:
public void LoadAB()
{
#if ASSETBUNDLE_ENABLE
#elif UNITY_EDITOR
Debug.Log("加载资源路径:" + path);
UnityEngine.Object target = UnityEditor.AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(path);
UnityEngine.Object temp= Instantiate(target);
return temp as GameObject;
#endif
}
带加密插件下载:UnityBuildAssetsBundle