Exemple #1
0
    static void BuildData()
    {
        ResmapUtility.canAuto2Resmap = false; //不自动导入到resmap中

        // 创建文件夹
        Directory.CreateDirectory(ORIGINABPATH);
        DeleteFiles("data_"); //删除旧文件

        // 重命名assetbundle
        FileInfo oldFile = new FileInfo(ORIGINABPATH + "/assetbundle");

        if (oldFile.Exists)
        {
            oldFile.MoveTo(ORIGINABPATH + "/Tmp");
        }

        ABNameUtility.ClearAllABNames();
        EditorUtility.DisplayProgressBar("打包前准备", "正在生成resmap文件...", 0.1f);
        //重新生成Resmap文件
        ResmapUtility.AddAllAsset();
        EditorUtility.DisplayProgressBar("打包前准备", "正在处理Data文件...", 0.3f);
        ABNameUtility.SetDataABNames();

        EditorUtility.DisplayProgressBar("打包", "正在打包Data文件...", 0.8f);
        FileEncrypt.Encrypt();//加密Txt
        AssetDatabase.Refresh();
        BuildPipeline.BuildAssetBundles(ORIGINABPATH, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);

        AssetDatabase.Refresh();
        ABNameUtility.ClearDataABNames();
        EditorUtility.DisplayProgressBar("打包", "Data文件加密中...", 0.9f);
        EncryptAB("data_");
        FileEncrypt.Decrypt();//还原Txt
        EditorUtility.ClearProgressBar();
        // 删除新assetbundle
        UnityEditor.FileUtil.DeleteFileOrDirectory(ORIGINABPATH + "/assetbundle");
        // 还原文件
        if (oldFile.Exists)
        {
            oldFile.MoveTo(ORIGINABPATH + "/assetbundle");
        }
        AssetDatabase.Refresh();
    }
Exemple #2
0
    static void BuildLua()
    {
        ResmapUtility.canAuto2Resmap = false; //不自动导入到resmap中

        // 创建文件夹
        Directory.CreateDirectory(ORIGINABPATH);

        // 重命名assetbundle
        FileInfo oldFile = new FileInfo(ORIGINABPATH + "/assetbundle");

        if (oldFile.Exists)
        {
            oldFile.MoveTo(ORIGINABPATH + "/Tmp");
        }

        ABNameUtility.ClearAllABNames();
        DeleteFiles("lua_");

        EditorUtility.DisplayProgressBar("打包前准备", "正在处理Lua文件...", 0.1f);
        LuaEncode.StartEncode(EditorUserBuildSettings.activeBuildTarget);
        ABNameUtility.SetLuaABNames();

        EditorUtility.DisplayProgressBar("打包", "正在打包Lua文件...", 0.5f);
        BuildPipeline.BuildAssetBundles(ORIGINABPATH, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);

        LuaEncode.EndEncode();
        EditorUtility.DisplayProgressBar("收尾", "Lua还原中...", 0.7f);

        ABNameUtility.ClearLuaABNames();
        EditorUtility.DisplayProgressBar("收尾", "Lua加密中...", 0.9f);
        EncryptAB("lua_");
        EditorUtility.ClearProgressBar();
        // 删除新assetbundle
        UnityEditor.FileUtil.DeleteFileOrDirectory(ORIGINABPATH + "/assetbundle");
        // 还原文件
        if (oldFile.Exists)
        {
            oldFile.MoveTo(ORIGINABPATH + "/assetbundle");
        }
        AssetDatabase.Refresh();
    }
    // 修改完之后,自动完成读写操作
    static void Deal(bool isAdd, string mapTxtName, List <string> assetList)
    {
        Dictionary <string, ResmapInfo> dic = InitResmap(mapTxtName);
        bool isModify = false;

        for (int i = 0; i < assetList.Count; i++)
        {
            string filePath = NormalizePath(assetList[i]);
            string fileName = Path.GetFileNameWithoutExtension(filePath);
            //多语言文件需要拼接出文件名
            int    index;
            string subfix = GetLocalResSubfix(filePath, out index);
            if (index >= 0)
            {
                fileName = fileName + subfix;
            }
            //重新设置信息
            ResmapInfo info = null;
            dic.TryGetValue(fileName, out info);
            if (isAdd) //增加
            {
                if (info == null)
                {
                    info            = new ResmapInfo();
                    info.key        = fileName;
                    info.editorPath = filePath;
                    info.abName     = ABNameUtility.GetResABName(filePath);
                    if (!string.IsNullOrEmpty(info.abName))
                    {
                        dic.Add(fileName, info);
                        isModify = true;
                    }
                }
                else
                {
                    if (info.editorPath.Equals(filePath))
                    {
                        continue;
                    }
                    if (!info.editorPath.Equals(filePath))
                    {
                        if (File.Exists(info.editorPath))
                        {
                            Debug.LogErrorFormat("添加的资源已经有重名的键名{0},请检查!已存在路径{1},添加的路径{2}", fileName, info.editorPath, filePath);
                            continue;
                        }
                        else
                        {
                            string abName = ABNameUtility.GetResABName(filePath);
                            if (string.IsNullOrEmpty(abName))
                            {
                                continue;
                            }
                            info.abName     = abName;
                            info.editorPath = filePath;
                            isModify        = true;
                        }
                    }
                }
                DealLocalConfig(true, Path.GetFileNameWithoutExtension(filePath), index, subfix);
            }
            else //删除操作
            {
                if (info != null)
                {
                    if (info.editorPath.Equals(filePath)) //保证是同一条
                    {
                        dic.Remove(fileName);
                        isModify = true;
                        DealLocalConfig(false, Path.GetFileNameWithoutExtension(filePath), index, subfix);
                    }
                }
            }
        }

        //对不存在的文件,再一次删除
        List <string> keyList = new List <string>(dic.Keys);

        for (int i = 0; i < keyList.Count; i++)
        {
            ResmapInfo info     = dic[keyList[i]];
            string     filePath = info.editorPath;
            if (!File.Exists(filePath))
            {
                string fileName = Path.GetFileNameWithoutExtension(filePath);
                int    index;
                string subfix = GetLocalResSubfix(filePath, out index);
                DealLocalConfig(false, fileName, index, subfix);
                //从字典中删除该条信息
                dic.Remove(keyList[i]);
                isModify = true;
            }
        }

        if (isModify)
        {
            //对资源进行名称排序
            dic = dic.OrderBy(pair => pair.Key).ToDictionary(k => k.Key, v => v.Value);

            //重新生成文件
            GenerateTxt(mapTxtName, dic);
        }

        if (!File.Exists(DataDir + mapTxtName))
        {
            GenerateTxt(mapTxtName, null);
        }
    }
Exemple #4
0
    static void BuildAll()
    {
        ResmapUtility.canAuto2Resmap = false; //不自动导入到resmap中
        // 创建文件夹
        Directory.CreateDirectory(ORIGINABPATH);
        if (Directory.Exists(ABPATH))
        {
            FileUtil.DeleteFileOrDirectory(ABPATH);
        }
        //记录所有的ab包,打包后,对无用的资源进行删除
        EditorUtility.DisplayProgressBar("打包前准备", "收集已有AB资源...", 0.05f);
        Dictionary <string, ABInfo> _infoDic = new Dictionary <string, ABInfo>();

        string[] files = Directory.GetFiles(ORIGINABPATH);
        for (int i = 0; i < files.Length; i++)
        {
            string path = files[i];
            if (path.EndsWith(".meta") || path.EndsWith(".manifest"))
            {
                continue;
            }
            string fileName = Path.GetFileNameWithoutExtension(path);
            if (fileName.Equals("assetbundle"))
            {
                continue;
            }
            _infoDic.Add(fileName, new ABInfo()
            {
                abName = fileName,
                path   = path
            });
        }
        ABNameUtility.ClearAllABNames();
        EditorUtility.DisplayProgressBar("打包前准备", "开始处理多语言资源...", 0.1f);
        MultiLngResDetach.StartDeal();
        EditorUtility.DisplayProgressBar("打包前准备", "正在重新生成Resmap文件...", 0.2f);
        ResmapUtility.AddAllAsset();
        EditorUtility.DisplayProgressBar("打包前准备", "Lua文件加密中...", 0.25f);
        LuaEncode.StartEncode(EditorUserBuildSettings.activeBuildTarget);
        EditorUtility.DisplayProgressBar("打包前准备", "配置文件加密中...", 0.3f);
        FileEncrypt.Encrypt();
        AssetDatabase.Refresh();

        EditorUtility.DisplayProgressBar("开始打包", "正在自动设置AB名...", 0.4f);
        ABNameUtility.SetAllABNames();
        // 打包
        EditorUtility.DisplayProgressBar("打包", "AB打包中...", 0.6f);
        AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles(ORIGINABPATH, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);

        string[] bundles = manifest.GetAllAssetBundles();
        for (int i = 0; i < bundles.Length; i++)
        {
            if (_infoDic.ContainsKey(bundles[i]))
            {
                _infoDic.Remove(bundles[i]);
            }
        }
        //删除老旧的ab包
        foreach (KeyValuePair <string, ABInfo> pair in _infoDic)
        {
            ABInfo info = pair.Value;
            UnityEditor.FileUtil.DeleteFileOrDirectory(info.path);
            UnityEditor.FileUtil.DeleteFileOrDirectory(info.path + ".manifest");
        }
        EditorUtility.DisplayProgressBar("收尾", "配置文件还原中...", 0.75f);
        FileEncrypt.Decrypt();//还原txt
        EditorUtility.DisplayProgressBar("收尾", "Lua文件还原中...", 0.8f);
        LuaEncode.EndEncode();
        EditorUtility.DisplayProgressBar("收尾", "多语言资源还原中...", 0.85f);
        MultiLngResDetach.Revert();
        EditorUtility.DisplayProgressBar("收尾", "清除AB名...", 0.9f);
        ABNameUtility.ClearAllABNames();
        EditorUtility.ClearProgressBar();

        AssetDatabase.Refresh();
        ResmapUtility.canAutoToResmap = true;
    }