————尊重原创,转载请注明出处,谢谢!!!!
http://blog.csdn.net/y1196645376/article/details/52602002
之前我们介绍了老版本的AssetBundle,在文章最后我们提到了在生成AB包的时候同时生成依赖关系信息文件。这样加载的时候就能够自动加载所有依赖项。而新版的AssetBundle正是采用的这样的方式。下面我来介绍一下: |
1.Unity5.x的AssetBundle的新功能。
为每个资源添加了AssetBundleName属性,我们可以通过Editor中的资源可视化视图下方为资源设置AssetBundleName。
上图第一个箭头所指既是AssetBundleName,名字固定为小写,另外,每个AssetBundle都可以设置一个Variant,其实就是一个后缀,实际上AssetBundle会添加这个后缀。如果有不同分辨率的同名资源,可以使用这个来区分。
值得注意的是:
AssetBundleName是可以带’/’符号的,这是一个很好的设计,因为我们打包的资源会很多,如果打包生成的所有AssetBundle都生成在同一个文件目录里,这肯定是很难管理的。不过名称引入’/’便可以很好解决这个问题。我们通过名字中设置类似”npc/demon/jushiguai.unity3d”这样的名字。那么在生成AssetBundle的时候会自动根据名字生成文件目录。这样生成的AssetBundle有了分类就很好管理了。如下图:
统一了打包AssetBundle接口:BuildPipeline.BuildAssetBundles(outputPath),outputPath为AB包生成文件夹路径。
BuildAssetBundles打包默认开启了:CompleteAssets ,CollectDependencies,DeterministicAssetBundle。
打包模式新增:
ForceRebuildAssetBundle : 强制重新打包所有AssetBundle文件,一般情况只做增量打包。
IgnoreTypeTreeChanges : 用于判断AssetBundle更新时,是否忽略TypeTree的变化。
AppendHashToAssetBundleName : 将Hash值添加在AB包文件名之后,开启后可通过文件名来判断哪些AB进行了更新。打包生成manifest文件,包含CRC,Hash,ID,AssetPath以及Dependencies等AssetBundle信息。新版的AssetBundle打包会自动帮你处理依赖关系。
加载AssetBundle的API被替换,如下:
4.x版本中的AssetBundle.CreateFromFile方法,在5.x版本中变成了AssetBundle.LoadFromFile方法。
4.x版本中的AssetBundle.CreateFromMemory方法,在5.x版本中变成了LoadFromMemoryAsync方法。
4.x版本中的AssetBundle.CreateFromMemoryImmediate方法,在5.x版本中变成了LoadFromMemory方法。
2.实战演练
在这里我准备了一个实例工程,在Prefab文件夹放了一些素材。
简单介绍下,Cube1,Cube2是上篇文章使用的两个预制体。JuShiGuai是一个怪物模型的Prefab,使用了Mat1,Mat2两个材质,而Mat1,Mat2两个材质分别使用了JuShiGuai_01,JuShiGuai_02两个贴图。
接下来我分别给这几个Prefab和Material,Texture设置AssetBundle。
Mat1 : materials/mat1.unity3d
Mat2 : materials/mat2.unity3d
JuShiGuai_01 : texture/jushiguai_01.unity3d
JuShiGuai_02 : texture/jushiguai_02.unity3d
Cube1 : cube1.unity3d
Cube2 : cube2.unity3d
JuShiGuai : jushiguai.unity3d
首先编写路径常量类:
using UnityEngine;
using System.Collections;
public