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(); }
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); } }
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; }