关于AssetBundle打包
随着Unity的更新,之前的BuildPipeline.BuildAssetBundle()已经被弃用了。现在使用的是BuildPipeLine.BuildAssetBundles().目前看到的主要差别,BuildAssetBundle返回一个布尔值,而BuildAssetBundles返回的是AssetBundleManifest对象。
这个方法可以放在Editor中,使用[Menu(“Asset/BuildAssetBundle”)],声明一个方法BuildAssetBundle,方便直接进行调用。
BuildPipeLine.BuildAssetBundles()有两个重载
//全部打包进一个AssetBundle资源包中
public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);
//打包进几个资源包中
public static AssetBundleManifest BuildAssetBundles(string outputPath, AssetBundleBuild[] builds, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);
第一种:全部打包进一个资源包中
[MenuItem("Asset/BuildAssetBundle")]
private static void BuildAssetBundle()
{
BuildPipeline.BuildAssetBundles("Assets/AB",BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);
}
(关于输出路径path:默认在Assets目录下,如果要放在一个单独的文件夹中,可以自定义输出路径,如”Assets/AssetBundles”。)
所有的AssetBundle文件被导出,还有一个.mainfest文件。这个文件提供了所打包资源的CRC和资源依赖信息,此外还有一个.mainfesr文件用来记录整个assetBundle文件夹信息(资源列表和各个列表之间的依赖关系)
第二种:打包进几个资源包中
下图是AssetBundleBuild里的关系
[MenuItem("Asset/BuildAssetBundles")]
private static void BuildAssetBundles()
{
//创建一个AssetBundleBuild数组
AssetBundleBuild[] buildMap = new AssetBundleBuild[2];
//给各个AssetBuildAsset进行命名
buildMap[0].assetBundleName = "resources";
buildMap[1].assetBundleName = "new bundle";
//声明两个string数组,存储将要被打包资源的路径
string[] assetPath1 = new string[2];
string[] assetPath2 = new string[3];
//下面是各个asset对应的资源的路径
assetPath1[0] = "Assets/Objects/Cube.prefab";
assetPath1[1] = "Assets/Objects/Sphere.prefab";
assetPath2[0] = "Assets/Objects/Plane.prefab";
assetPath2[1] = "Assets/Objects/Quad.prefab";
assetPath2[2] = "Assets/Objects/Cylinder.prefab";
//将路径进行赋值
buildMap[0].assetNames = assetPath1;
buildMap[1].assetNames = assetPath2;
//打包资源
BuildPipeline.BuildAssetBundles("Assets/AssetBundles",buildMap,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);
}
通过上面方法,分类打包进几个资源包里。