private static void CreateFunctionZipAndJson(ExcelWorksheet worksheet, string resId) { // 1内容 2函数 3黑名单 var row = worksheet.Dimension.End.Row; List <BundleFilter> filterList = new List <BundleFilter>(); BundleFilter filter = null; for (int i = 2; i <= row; i++) { object date = worksheet.Cells[i, 2].Value; if (date != null) { filter = new BundleFilter(); filterList.Add(filter); filter.Id = date.ToString(); filter.BlackList = new BlackList(); filter.WhiteList = new WhiteList(); AddToNameList(filter.BlackList, worksheet.Cells[i, 3].Value); } else { AddToNameList(filter.BlackList, worksheet.Cells[i, 3].Value); } } Type type = Type.GetType("PackageManager"); foreach (var bundleFilter in filterList) { MethodInfo method = type.GetMethod(bundleFilter.Id, BindingFlags.Static | BindingFlags.NonPublic); method.Invoke(null, new object[] { bundleFilter.BlackList }); } }
private static void CreateSpecial(ExcelWorksheet worksheet, string resId) { ResIndex resIndex = new ResIndex(); resIndex.packageDict = new Dictionary <string, ResPack>(); // 1内容 2筛选路径 3白名单 4黑名单 5ID var row = worksheet.Dimension.End.Row; List <BundleFilter> filterList = new List <BundleFilter>(); BundleFilter filter = null; for (int i = 2; i < row; i++) { object date = worksheet.Cells[i, 2].Value; if (date != null) { filter = new BundleFilter(); filterList.Add(filter); filter.DirPath = date.ToString().Replace("\\", "/"); string rootFolder = filter.DirPath; rootFolder = PackageManager.GetAssetBundleDir() + "/" + rootFolder; filter.BlackList = new BlackList(); filter.WhiteList = new WhiteList(); filter.BlackList.RootFolder = rootFolder; filter.WhiteList.RootFolder = rootFolder; AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value); AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value); filter.Id = worksheet.Cells[i, 5].Value.ToString(); } else { AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value); AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value); } } Dictionary <string, FileInfo> fileDict = new Dictionary <string, FileInfo>(); foreach (var bundleFilter in filterList) { List <FileInfo> files = bundleFilter.SearchFile(); foreach (var fileInfo in files) { string key = fileInfo.FullName.Replace("\\", "/"); if (!fileDict.ContainsKey(key)) { fileDict.Add(key, fileInfo); } } string releasePath = "AssetBundles/" + PackageManager.SystemTag; ResPack resPack = new ResPack(); resPack.id = bundleFilter.Id; resPack.downloadPath = PackageManager.GetPackageStorePath() + "/" + resId; resPack.releasePath = releasePath; resPack.items = new List <ResItem>(); resIndex.packageDict.Add(resPack.id, resPack); foreach (var fileInfo in fileDict) { ResItem resItem = new ResItem(); resItem.Path = GetRelatePath(fileInfo.Value.FullName); resItem.Md5 = MD5Util.Get(fileInfo.Key); resItem.Size = fileInfo.Value.Length; resPack.packageType = FileType.Original; resPack.items.Add(resItem); CopyFile(fileInfo.Value.FullName, PackageManager.OutputPath + resId + "/" + resItem.Path); } } string json = JsonConvert.SerializeObject(resIndex, Formatting.Indented); FileUtil.SaveFileText(PackageManager.OutputPath, resId + ".json", json); }
public static void CreateSingleZipAndJson(ExcelWorksheet worksheet, string resId) { ResIndex resIndex = new ResIndex(); // 1内容 2筛选路径 3白名单 4黑名单 var row = worksheet.Dimension.End.Row; List <BundleFilter> filterList = new List <BundleFilter>(); BundleFilter filter = null; for (int i = 2; i < row; i++) { object date = worksheet.Cells[i, 2].Value; if (date != null) { filter = new BundleFilter(); filterList.Add(filter); filter.DirPath = date.ToString(); string rootFolder = filter.DirPath; rootFolder = PackageManager.GetAssetBundleDir() + "/" + rootFolder; filter.BlackList = new BlackList(); filter.WhiteList = new WhiteList(); filter.BlackList.RootFolder = rootFolder; filter.WhiteList.RootFolder = rootFolder; AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value); AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value); } else { AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value); AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value); } } resIndex.belong = resId; resIndex.language = PackageManager.Language; resIndex.packageDict = new Dictionary <string, ResPack>(); Dictionary <string, FileInfo> fileDict = new Dictionary <string, FileInfo>(); if (resId == ResPath.AppStart) { //把共享音频放到AppStart里面下载 string root = PackageManager.GetAssetBundleDir(); foreach (var id in PackageManager.sharedAudioDict) { FileInfo fileInfo = new FileInfo(root + "/story/dubbing/" + id.Key + ".bytes"); string key = fileInfo.FullName.Replace("\\", "/"); fileDict.Add(key, fileInfo); } } foreach (var bundleFilter in filterList) { List <FileInfo> files = bundleFilter.SearchFile(); foreach (var fileInfo in files) { string key = fileInfo.FullName.Replace("\\", "/"); if (!fileDict.ContainsKey(key)) { fileDict.Add(key, fileInfo); } } } ResPack resPack = new ResPack(); resPack.id = resIndex.belong; resPack.releasePath = "AssetBundles/" + PackageManager.SystemTag; resPack.downloadPath = PackageManager.GetPackageStorePath() + "/" + resIndex.belong + "/" + resPack.id + ".zip"; resPack.items = new List <ResItem>(); resPack.packageType = FileType.Zip; resIndex.packageDict.Add(resPack.id, resPack); foreach (var fileInfo in fileDict) { ResItem resItem = new ResItem(); resItem.Path = GetRelatePath(fileInfo.Value.FullName); resItem.Md5 = MD5Util.Get(fileInfo.Key); resItem.Size = fileInfo.Value.Length; resPack.items.Add(resItem); } DeleteFile(resIndex); CopyFile(resIndex); string packagePath = PackageManager.OutputPath + resPack.id; if (Directory.Exists(packagePath)) { Directory.Delete(packagePath, true); } Directory.CreateDirectory(packagePath); string zipFileName = packagePath + "/" + resPack.id + ".zip"; string destDir = PackageManager.GetPackageDir() + "/" + resPack.id; string[] fileList = Directory.GetFiles(destDir, "*", SearchOption.AllDirectories); EditorUtility.DisplayProgressBar("压缩", "正在压缩文件(" + Path.GetFileName(packagePath), 1); List <string> pathInZipList = new List <string>(); for (int i = 0; i < fileList.Length; i++) { string str = Path.GetDirectoryName(fileList[i]); str = str.Replace("\\", "/"); str = str.Replace(PackageManager.GetPackageDir().Replace("\\", "/") + "/" + resPack.id + "/", ""); pathInZipList.Add(str + "/"); } ZipUtil.CreateZip(fileList, zipFileName, pathInZipList.ToArray(), 0); EditorUtility.ClearProgressBar(); resPack.packageMd5 = MD5Util.Get(zipFileName); resPack.packageSize = new FileInfo(zipFileName).Length; string json = JsonConvert.SerializeObject(resIndex, Formatting.Indented); FileUtil.SaveFileText(PackageManager.OutputPath, resId + ".json", json); }
public static void CreateMultiZipAndJson(ExcelWorksheet worksheet, string resId) { Stopwatch sw = Stopwatch.StartNew(); ResIndex resIndex = new ResIndex(); // 1内容 2筛选路径 3白名单 4黑名单 5ID var row = worksheet.Dimension.End.Row; List <BundleFilter> filterList = new List <BundleFilter>(); BundleFilter filter = null; for (int i = 2; i < row; i++) { object date = worksheet.Cells[i, 2].Value; if (date != null) { filter = new BundleFilter(); filterList.Add(filter); filter.DirPath = date.ToString().Replace("\\", "/"); string rootFolder = filter.DirPath; rootFolder = PackageManager.GetAssetBundleDir() + "/" + rootFolder; filter.BlackList = new BlackList(); filter.WhiteList = new WhiteList(); filter.BlackList.RootFolder = rootFolder; filter.WhiteList.RootFolder = rootFolder; AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value); AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value); filter.Id = worksheet.Cells[i, 5].Value.ToString(); } else { AddToNameList(filter.WhiteList, worksheet.Cells[i, 3].Value); AddToNameList(filter.BlackList, worksheet.Cells[i, 4].Value); } } resIndex.belong = resId; resIndex.language = PackageManager.Language; resIndex.packageDict = new Dictionary <string, ResPack>(); Debug.Log("<color='#00ff00'>" + resId + "时间1->" + sw.ElapsedMilliseconds + "</color>"); DeleteFile(resIndex); Debug.Log("<color='#00ff00'>" + resId + "时间2.1->" + sw.ElapsedMilliseconds + "</color>"); string packagePath = PackageManager.OutputPath + resId; if (Directory.Exists(packagePath)) { Directory.Delete(packagePath, true); } Directory.CreateDirectory(packagePath); string releasePath = "AssetBundles/" + PackageManager.SystemTag; foreach (var bundleFilter in filterList) { List <FileInfo> files = bundleFilter.SearchFile(); ResPack resPack = new ResPack(); resPack.id = bundleFilter.Id; resPack.releasePath = releasePath; resPack.packageType = FileType.Zip; resPack.downloadPath = PackageManager.GetPackageStorePath() + "/" + resIndex.belong + "/" + resPack.id + ".zip"; resPack.items = new List <ResItem>(); resIndex.packageDict.Add(resPack.id, resPack); foreach (var fileInfo in files) { ResItem resItem = new ResItem(); resItem.Path = GetRelatePath(fileInfo.FullName); resItem.Md5 = MD5Util.Get(fileInfo.FullName); resItem.Size = fileInfo.Length; resPack.items.Add(resItem); CopyFile(fileInfo.FullName, PackageManager.GetPackageDir() + "/" + resId + "/" + resItem.Path); } } Debug.Log("<color='#00ff00'>" + resId + "时间2.2->" + sw.ElapsedMilliseconds + "</color>"); foreach (var resPack in resIndex.packageDict) { string zipFileName = packagePath + "/" + resPack.Value.id + ".zip"; List <string> fileList = new List <string>(); string rootPath = PackageManager.GetPackageDir().Replace("\\", "/") + "/" + resId + "/"; foreach (var item in resPack.Value.items) { fileList.Add(rootPath + item.Path); } EditorUtility.DisplayProgressBar("压缩", "正在压缩文件(" + Path.GetFileName(packagePath) + ")", 1); List <string> pathInZipList = new List <string>(); for (int i = 0; i < fileList.Count; i++) { string str = Path.GetDirectoryName(fileList[i]); str = str.Replace("\\", "/"); str = str.Replace( PackageManager.GetPackageDir().Replace("\\", "/") + "/" + resId + "/", ""); pathInZipList.Add(str + "/"); } ZipUtil.CreateZip(fileList.ToArray(), zipFileName, pathInZipList.ToArray(), 0); EditorUtility.ClearProgressBar(); resPack.Value.packageMd5 = MD5Util.Get(zipFileName); resPack.Value.packageSize = new FileInfo(zipFileName).Length; } Debug.Log("<color='#00ff00'>" + resId + "时间3->" + sw.ElapsedMilliseconds + "</color>"); string json = JsonConvert.SerializeObject(resIndex, Formatting.Indented); FileUtil.SaveFileText(PackageManager.OutputPath, resId + ".json", json); }
public override void OnInspectorGUI() { if (configs == null) { configs = (BundleConfig)target; } scrollView = GUILayout.BeginScrollView(scrollView); EditorGUILayout.HelpBox(string.Format(note, configs.filters.Count), MessageType.Info); GUILayout.Space(10); GUILayout.BeginVertical(); #region 添加、清空 GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUI.color = Color.green; if (GUILayout.Button("添加", GUILayout.Width(80))) { BundleFilter filter = new BundleFilter(); configs.filters.Add(filter); } GUI.color = Color.red; if (GUILayout.Button("清空", GUILayout.Width(80))) { if (EditorUtility.DisplayDialog("", "确认要删除所有配置?", "确认", "取消")) { configs.filters.Clear(); } } GUI.color = Color.white; GUILayout.EndHorizontal(); #endregion GUILayout.Space(10); int count = configs.filters.Count; for (int i = 0; i < count; i++) { GUI.backgroundColor = Color.gray; BundleFilter filter = configs.filters[i]; if (GUILayout.Button("AssetPath: " + filter.assetPath + "(" + (filter.isExpand ? "OL Minus" : "OL Plus") + ")")) { filter.isExpand = !filter.isExpand; } if (filter.isExpand) { GUILayout.BeginHorizontal(); filter.assetPath = EditorGUILayout.TextField("Asset Path:", filter.assetPath); //GUILayout.FlexibleSpace(); if (GUILayout.Button("Select", GUILayout.Width(50))) { string p = EditorUtility.OpenFolderPanel("选择文件夹", Application.dataPath, ""); if (!string.IsNullOrEmpty(p)) { if (p.Contains("Assets/")) { string[] ps = p.Split(new[] { "Assets/" }, StringSplitOptions.None); filter.assetPath = "Assets/" + ps[1]; } } } GUI.color = Color.red; if (GUILayout.Button("X", GUILayout.Width(30))) { delNo = i + 1; } GUI.color = Color.white; GUILayout.EndHorizontal(); filter.isFolderPack = EditorGUILayout.Toggle("IsFolderPack:", filter.isFolderPack); if (filter.isFolderPack) { filter.isChildFolder = EditorGUILayout.Toggle("IsChildFolder:", filter.isChildFolder); if (filter.isChildFolder) { GUILayout.Label("<!--当前把Asset Path下每个子文件夹打成一个Bundle.-->"); } else { GUILayout.Label("<!--当前把Asset Path下所有后缀资源打成一个Bundle.-->"); } } else { GUILayout.Label("<!-------当前按照后缀打包-------->"); filter.extension = EditorGUILayout.TextField("Extension:", filter.extension); filter.isSingle = EditorGUILayout.Toggle("IsSingle:", filter.isSingle); filter.isDepend = EditorGUILayout.Toggle("IsDepend:", filter.isDepend); if (filter.isDepend) { filter.isDependSplit = EditorGUILayout.Toggle("IsDependSplit:", filter.isDependSplit); if (!filter.isDependSplit) { filter.dependName = EditorGUILayout.TextField("DependName", filter.dependName); } } } } GUI.backgroundColor = Color.white; GUILayout.Space(5); } if (delNo > 0 && delNo <= configs.filters.Count) { configs.filters.RemoveAt(delNo - 1); } delNo = 0; GUILayout.EndVertical(); GUILayout.EndScrollView(); if (GUI.changed) { EditorUtility.SetDirty(target); } serializedObject.ApplyModifiedProperties(); }