Unity学习笔记15——Unity5之后的AssetBundle使用方法

来源:互联网 发布:linux ssh 目录结构图 编辑:程序博客网 时间:2024/05/16 10:15

前言:

       在旧版的Unity(5.0以下)中,将资源打包成AseetBundle时间比较麻烦的事情,需要自行先读取资源文件,然后将资源文件信息都存放到Object[]对象数组中,最后将数据对象传递给BuildPipeline.BuildAssetBundle (Object mainAsset, Object[] assets, string pathName, [DefaultValue ("BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets")] BuildAssetBundleOptions assetBundleOptions, [DefaultValue ("BuildTarget.WebPlayer")] BuildTarget targetPlatform)接口,完成资源的打包。


一、简介:

        在Unity 5.0版本中新增了一个方法:BuildPipeline.BuildAssetBundles(string outputPath),并且引入了一个.manifest文件,这个文件用于描述assetbundle包的大小、crc验证、包之间的依赖关系等,是一个文本文件。当然,加载资源的时候Unity会自动处理好其他依赖包的加载。

        为每个需要打包到AssetBundle中的资源设置一个assetBundleName,修改这个属性其实是修改对应的.meta文件,且assetBundleName固定为小写的。然后调用这个方法BuildPipeline.BuildAssetBundles(string outputPath),那么所有已经设置过assetBundleName的资源就会自动打包,这样子的好处是:

        1、可以直接在编辑器UI上设置操作;

        2、提供了更简便的脚本API;

        3、Unity本身会处理所有的依赖关系;

        4、生成manifest文件,用于记录资源间的依赖关系,并以链式结构记录,修改时只需修改链的其中一环;

        5、增量打包功能。


        实际上,在对一个资源设置assetBundleName的时候,实际上它的信息已经存在于AssetDataBase中了。所以在打包的时候,只需要调用BuildPipeline.BuildAssetBundle方法,就会将记录在AssetDataBase中的所有资源先计算出依赖关系,再拆分打包。


二、操作步骤:

1、为需要打包到AssetBundle中的资源设置其assetBundleName,有两种方式可以实现这个功能:一是手动在编辑界面对资源一一进行手动设置;二是遍历需要设置的资源目录,通过代码动态设置。显然第二个办法更加方便,具体的步骤如下:

        a.遍历要打包的资源目录,找到需要打包的预设或者资源;

        b.设置资源的assetBundleName属性;

        c.通过AssetDatabase.GetDependencies(string path)方法逐个找到资源的依赖资源路径;

        d.使用AssetDatabase.AssetPathToGUID(string path)计算出每个资源的唯一ID,然后将此ID当做assetBundleName赋予每个依赖资源;

        e.调用BuildPipeline.BuildAssetBundles(string outputPath)打包到指定位置。


2.资源加载:

        由于依赖关系存在于manifest中,所以加载资源之前,需要先加载manifest文件。


三、总结:

        其实,在Unity 5.x的打包AssetBundle方案,其实就是一种建立一个资源与最终打出来的资源包相关联的一个关联文件,打包和解包都通过此关联文件来作为桥梁,简化了资源包的使用操作。


0 0
原创粉丝点击