根据文件夹名字标志AssetBundle的名字
using UnityEditor;
using System.IO;

public class TipDataAssetBundleName  {

    [MenuItem("Resource/2.Tip AssetBundleName")]
    public static void TipAssetBundleName()
    {
        DirectoryInfo directoryInfo = new DirectoryInfo(EditorConstConfig.TipDataPath);
        if (!directoryInfo.Exists)
        {
            UnityEngine.Debug.LogError("Tip DIR not exists");
            return;
        }

        string[] dirs = Directory.GetDirectories(EditorConstConfig.TipDataPath);
        foreach (string dir in dirs)
        {
            string name = Path.GetFileName(dir);
            TipAssetBundleName(dir, name);
        }

        AssetDatabase.Refresh();
    }

    private static void TipAssetBundleName(string directory, string name)
    {
        if (name.IndexOf("/") == -1)
        {
            //再深一层
            string[] dirs = Directory.GetDirectories(directory);
            foreach (string dir in dirs)
            {
                name = name + "/" + Path.GetFileName(dir);
                TipAssetBundleName(dir, name);
            }
        }
        else
        {
            string[] files = Directory.GetFiles(directory);
            foreach (string file in files)
            {
                if (file.EndsWith(".meta")) continue;
                string path = file.Substring(file.IndexOf("Assets")).Replace('\\','/');
                AssetImporter importer = AssetImporter.GetAtPath(path);
                importer.assetBundleName = name;
                importer.assetBundleVariant = "assetbundle";
            }
        }
    }
}


这里的菜单是2,其实在我写的资源管理中还有一步就是将资源复制到专门用来标志Assetbundle名字的单独文件夹中,然后调用这个会遍历这个文件夹,按照文件夹的名字来给资源添加AssetBundle名字,第一层目录是资源的大分类,第二层目录才是装资源的,例如Lua/login文件夹,login下的资源文件的AssetBundle名字就是lua/login。Lua文件夹下不保存任何资源,只做分类,这只是规定而已,也可以标志为lua,个人爱好。


首页 我的博客
粤ICP备17103704号