前言
在使用新的Unity3d 5.0后,我们发现在Inspector面板上多了一个东西
这里主要有两个可以设置的选项AssetBundle和Variant
进过测试,发现5.01版本在AssetBundle方面存在bug,幸好在5.02版本进行了修复,所以在5.02以后的版本才可以放心使用,不然会出现贴图丢失等问题
AssetBundle 在这里指的是我们打包后会生成的包名,可以有后缀,比如ui.assetbundle,ui.uity3d等等,但是我们要注意的是,使用的时候名称要对应起来.
点击菜单里面的New... 我们可以创建出一个新的assetbundle.我们也可以把好几个Prefabs设置 在一个AssetBundle里面,方法很简单,就是选中你要设置的文件,然后
在菜单里面统一设置为你想的名字.比如我的项目里面有好几个元素是打算打包在ui这个包里的,就可以这样设置.
通常随着项目里设置的AssetBundle越来越来,管理起来会比较不方便,比如我想知道ui这个包里面有什么文件的时候,可以点击AssetBundle中的选项,
当然是在当前选项是ui的情况下,点击下面的Filter Selecte Name ,系统就会进行过滤,还有一个最直接的方法,就是在搜索栏里直接输入:
在以往的版本,我们都是使用WWW,这个东西来加载我们打包的资源,接口也是比较简单
public static WWW LoadFromCacheOrDownload(string url, int version); public static WWW LoadFromCacheOrDownload(string url, int version, [DefaultValue("0")] uint crc);但是在新的5.0版本里,多了两个新的接口
public static WWW LoadFromCacheOrDownload(string url, Hash128 hash); public static WWW LoadFromCacheOrDownload(string url, Hash128 hash, [DefaultValue("0")] uint crc);唯一不同的地方就在于Hash128这个东西.关于这个东西官方的api文档中还找不到,经过测试,它的大致用意是用来区分同一个
资源名称,不同版本用的.在新的版本中存在一个叫做AssetBundleManifest,的类,里面封装了如下接口
据官方的介绍,这个类主要是在我们定义的每个AssetBundle的时候会产生一个Manifest文件,它的作用如下:
1.作为CRC校验用
2.Asset文件Hash,将所有的asset资源包含在这个AssetBundle中,但是仅仅用于编译的增量计数检查。
3.资源名称,所有同样名称的AssetBundle都会打进一个包中.通过Mainfest都可以取到这些资源
4.依赖资源的名称.
在这里我觉比较重要的一个东西就是AssetBundle Variant
这个东西主要应用在不同分辨率资源的使用或者多语言图片资源的使用上比较多
例如:当你在不同的分辨率下使用两套不容的资源,在这里我们暂且定义为"texture.hd"和"texture.sd"
我们可以这样做:新建立两个文件夹,叫做"MyAssets HD"和"MyAssets HD",把他们的AssetBundle统一设置
为"variants/texture",Variant分为设置为"hd"和"sd",最终如下:
这样我们就可以通过
public static WWW LoadFromCacheOrDownload(string url, Hash128 hash);的方式来使用我们两种分辨率下的资源了
这里比较关心的是url和hash这两个参数
url,估计大家都知道是"variants/texture",
然而hash就是需要借助AssetBundleManifest.GetAssetBundleHash的方法来获取了.
今天时间比较匆忙,暂时说到这里,希望可以给大家抛砖引玉.详细的实现方案请看第二讲