Unity 2017版本的Assetbundle(打包)

听说2017的版本的Assetbundle更新了,这次本着实验下的心态来测试下新版本的打包到底有哪些功能,大家可能知道,Unity的每次更新都是本着简化操作,简化代码的原则进行集中管理和迭代,废话不多说,来看看新版本都有哪些吧。

   1:打包:新版本的打包只有一种方法:BuildPipeline.BuildAssetBundles();

     方法里有2个重载:(1)BuildPipeline.BuildAssetBundles(string outpath,BuildAssetBundleOptions assetbundleOptions,BuildTarget  target)

                                                       string outpath:打包后路径

                                                       BuildAssetBundleOptions:以什么方式去打包,具体可查看相对应的官方文档

                                                       BuildTarget :打包的目标平台

                这种打包是将Editor符合一定条件下的所有资源进行打包

                                         (2) BuildPipeline.BuildAssetBundles(string outpath,AssetBundle[] assetbundle,BuildAssetBundleOptions assetbundleOptions,BuildTarget  target)                               第二种方法里多了一个AssetBundle[] 的这个参数,这种打包是将你选择的资源进行打包。

                                        关于这个参数我研究了一下,这个是结构体参数,你们用f12可以导过去,结构体又2个重要必须赋值的属性,assetbundle.assetNames和assetbundle.assetBundleName 。

 话不多说,下面直接上代码让大家更直观的看到他们的使用方式:

                                                   ///


    /// 将符合条件的全部分包打包(基本没什么卵用)
    ///

    /// 
    [MenuItem("Tool/GreatBundle")]
    static void GreatBundle()
    {
        Object[] selects = Selection.objects;
        foreach (Object item in selects)
        {
            Debug.Log(item);
            BuildPipeline.BuildAssetBundles(Application.dataPath + "/StreamingAssets/Manany", BuildAssetBundleOptions.None, BuildTarget.Android);
            AssetDatabase.Refresh();//打包后刷新,不加这行代码的话要手动刷新才可以看得到打包后的Assetbundle包
        }
    }
    ///
    /// 将选定的多个游戏对象打包一个
    ///

    /// 
    [MenuItem("Tool/GreatAllBundle")]
    static void GreatAllBundle() {
        AssetBundleBuild[] builds = new AssetBundleBuild[1];
        Object[] selects = Selection.GetFiltered(typeof(Object),SelectionMode.DeepAssets);
        string[] TestAsset = new string[selects.Length];
        for (int i = 0; i < selects.Length; i++)
        {
            TestAsset[i] = AssetDatabase.GetAssetPath(selects[i]);
            Debug.Log(TestAsset[i]);
        }
        builds[0].assetNames = TestAsset;
        builds[0].assetBundleName = selects[0].name;
        BuildPipeline.BuildAssetBundles(Application.dataPath + "/StreamingAssets/One",builds, BuildAssetBundleOptions.None, BuildTarget.Android);
        AssetDatabase.Refresh();
    }

    对了,还有个换统一名字的编辑器扩展,这里也给奉上

    [MenuItem("Tool/SetAssetBundleNameExtension")]  //将选定的资源进行统一设置AssetBundle名
    static void SetBundleName() {
        Object[] selects = Selection.objects;
        foreach (Object item in selects)
        {
            string path = AssetDatabase.GetAssetPath(item);
            AssetImporter asset = AssetImporter.GetAtPath(path);
            asset.assetBundleName = item.name;//设置Bundle文件的名称
            asset.assetBundleVariant = "asset";//设置Bundle文件的扩展名
            asset.SaveAndReimport();
        }
        AssetDatabase.Refresh();
    }

对了,这是个编辑器扩展的工具脚本,脚本一定要放在Editor文件夹下且继承Editor,如有不懂的欢迎留言,一起研究,有错的也希望大家提下,共同进步

你可能感兴趣的:(Unity)