/// <summary> /// 生成资源清单 /// </summary> public static void GenResourceList() { EditorUtility.DisplayProgressBar("生成资源清单", "生成资源清单...", 0); bool isError = false; var watch = Watch.Do(() => { try { var outputPath = System.IO.Path.Combine(AssetBundles, EditorUserBuildSettings.activeBuildTarget.ToString()); if (!System.IO.Directory.Exists(outputPath)) { System.IO.Directory.CreateDirectory(outputPath); } var resourceListfilePath = System.IO.Path.Combine(outputPath, ResourcesFileName); writeResourceListFile(resourceListfilePath); } catch (System.Exception e) { isError = true; UnityEngine.Debug.LogError(e.Message); } }); EditorUtility.ClearProgressBar(); if (!isError) { UnityEngine.Debug.Log("KSwordKit: 资源清单生成完成! (" + watch.Elapsed.TotalSeconds + "s)"); } }
public static void ClearAssetLabels() { if (!EditorUtility.DisplayDialog("是否要清理资源标签(全部的或指定资源的)?", "清理后无法恢复!", "确认清理", "取消操作")) { Debug.Log(KSwordKitName + ": 资源管理/清理资源标签(全部的或指定资源的) -> 已取消!"); return; } EditorUtility.DisplayProgressBar("清理资源标签(全部的或指定资源的)", "等待程序执行..", 0); try { var watch = Watch.Do(() => { var objects = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets); if (objects.Length == 0) { AssetDatabase.RemoveUnusedAssetBundleNames(); string[] allAssetBundleNames = AssetDatabase.GetAllAssetBundleNames(); for (int i = 0; i < allAssetBundleNames.Length; i++) { string text = allAssetBundleNames[i]; AssetDatabase.RemoveAssetBundleName(text, true); } } foreach (var o in objects) { var path = AssetDatabase.GetAssetPath(o); EditorUtility.DisplayProgressBar("清理资源标签(全部的或指定资源的)", "正在处理:" + path, Random.Range(0f, 1)); if (System.IO.Directory.Exists(path)) { continue; } AssetImporter assetImporter = AssetImporter.GetAtPath(path); //得到Asset if (assetImporter != null && assetImporter.assetBundleName != null && assetImporter.assetBundleName != string.Empty) { assetImporter.assetBundleName = null; } } AssetDatabase.Refresh(); }); UnityEngine.Debug.Log("KSwordKit: 资源管理/清理资源标签(全部的或指定资源的) -> 完成! (" + watch.ElapsedMilliseconds + "ms)"); } catch (System.Exception e) { UnityEngine.Debug.LogError(KSwordKitName + ": 执行 `清理资源标签(全部的或指定资源的)` 时,发生错误 -> " + e.Message); } EditorUtility.ClearProgressBar(); }
public static void AssetBundleBuildAll() { EditorUtility.DisplayProgressBar("生成资源包(默认位置, " + EditorUserBuildSettings.activeBuildTarget.ToString() + ")", "程序执行中...", 0); bool isError = false; string loginfo = null; var watch = Watch.Do(() => { try { var outputPath = assetBundleOutputDirectory(); string error = null; try { BuildPipeline.BuildAssetBundles(outputPath, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget); } catch (System.Exception e) { error = e.Message; } if (string.IsNullOrEmpty(error)) { GenResourceList(); loginfo = "(全部生成)"; } else { Debug.LogError(KSwordKitName + ": 执行 `生成资源包(默认位置)(当前编译平台: " + EditorUserBuildSettings.activeBuildTarget.ToString() + ")(选中的资源)` 时,发生错误 -> " + error); } AssetDatabase.Refresh(); } catch (System.Exception e) { isError = true; Debug.LogError(KSwordKitName + ": 执行 `生成资源包(默认位置)(当前编译平台: " + EditorUserBuildSettings.activeBuildTarget.ToString() + ")(选中的资源)` 时,发生错误 -> " + e.Message); } }); EditorUtility.ClearProgressBar(); if (!isError) { UnityEngine.Debug.Log("KSwordKit: 资源管理/生成资源包(默认位置)(当前编译平台: " + EditorUserBuildSettings.activeBuildTarget.ToString() + ")" + loginfo + " -> 完成! (" + watch.Elapsed.TotalSeconds + "s)"); } }
public static void AssetBundleCleanUpPersistentDataPath() { if (!EditorUtility.DisplayDialog("是否要清理资源包 (PersistentDataPath)(当前编译平台: " + EditorUserBuildSettings.activeBuildTarget.ToString() + ") ?", "清理后无法恢复!", "确认清理", "取消操作")) { Debug.Log(KSwordKitName + ": 资源管理/清理资源包 (PersistentDataPath)(当前编译平台: " + EditorUserBuildSettings.activeBuildTarget.ToString() + ") -> 已取消!"); return; } EditorUtility.DisplayProgressBar("清理资源包 (PersistentDataPath)(当前编译平台: " + EditorUserBuildSettings.activeBuildTarget.ToString() + ")", "程序执行中...", 0); bool isError = false; var watch = Watch.Do(() => { try { EditorUtility.DisplayProgressBar("清理资源包 (PersistentDataPath)(当前编译平台: " + EditorUserBuildSettings.activeBuildTarget.ToString() + ")", "正在清理...", 0.5f); var outputPath = System.IO.Path.Combine(Application.persistentDataPath, AssetBundles); outputPath = System.IO.Path.Combine(outputPath, EditorUserBuildSettings.activeBuildTarget.ToString()); if (System.IO.Directory.Exists(outputPath)) { FileUtil.DeleteFileOrDirectory(outputPath); } var metapath = outputPath + ".meta"; if (System.IO.File.Exists(metapath)) { FileUtil.DeleteFileOrDirectory(metapath); } AssetDatabase.Refresh(); } catch (System.Exception e) { isError = true; Debug.LogError(KSwordKitName + ": 执行 `清理资源包 (PersistentDataPath)(当前编译平台: " + EditorUserBuildSettings.activeBuildTarget.ToString() + ")` 时,发生错误 -> " + e.Message); } }); EditorUtility.ClearProgressBar(); if (!isError) { UnityEngine.Debug.Log("KSwordKit: 资源管理/清理资源包 (PersistentDataPath)(当前编译平台: " + EditorUserBuildSettings.activeBuildTarget.ToString() + ") -> 完成! (" + watch.Elapsed.TotalSeconds + "s)"); } }
public static void CopyResourcesToPersistentDataPath() { EditorUtility.DisplayProgressBar("拷贝资源包到 PersistentDataPath", "程序执行中...", 0); bool isError = false; var watch = Watch.Do(() => { try { var outputPath = System.IO.Path.Combine(Application.persistentDataPath, AssetBundles); outputPath = System.IO.Path.Combine(outputPath, EditorUserBuildSettings.activeBuildTarget.ToString()); if (System.IO.Directory.Exists(outputPath)) { FileUtil.DeleteFileOrDirectory(outputPath); } var metapath = outputPath + ".meta"; if (System.IO.File.Exists(metapath)) { FileUtil.DeleteFileOrDirectory(metapath); } var sPath = System.IO.Path.Combine(AssetBundles, EditorUserBuildSettings.activeBuildTarget.ToString()); CopyFolder(sPath, outputPath); } catch (System.Exception e) { isError = true; Debug.LogError(KSwordKitName + ": 执行 `拷贝资源包到 PersistentDataPath` 时,发生错误 -> " + e.Message); } }); AssetDatabase.Refresh(); EditorUtility.ClearProgressBar(); if (!isError) { UnityEngine.Debug.Log("KSwordKit: 资源管理/拷贝资源包到 PersistentDataPath -> 完成! (" + watch.Elapsed.TotalSeconds + "s)"); } }
public static void SetMakeAllResourcesMerge() { var objects = Selection.objects; // 没有选中任何资源 if (objects.Length == 0) { UnityEngine.Debug.LogWarning(KSwordKitName + ": 未选中任何资源,无法创建规则文件!"); return; } EditorUtility.DisplayProgressBar("创建规则文件(须选中某位置)", "程序执行中...", 0); bool isError = false; var watch = Watch.Do(() => { try { var rulefilepath = AssetBundleGeneratesRuleFileName; float i = 0; foreach (var _object in objects) { i++; var path = AssetDatabase.GetAssetPath(_object); EditorUtility.DisplayProgressBar("创建规则文件(须选中某位置)", "正在处理:" + path, i / objects.Length); if (System.IO.File.Exists(path)) { var fileinfo = new System.IO.FileInfo(path); rulefilepath = System.IO.Path.Combine(fileinfo.Directory.FullName, AssetBundleGeneratesRuleFileName); } else if (System.IO.Directory.Exists(path)) { rulefilepath = System.IO.Path.Combine(path, AssetBundleGeneratesRuleFileName); } if (!System.IO.File.Exists(rulefilepath)) { var file = System.IO.File.CreateText(rulefilepath); file.Write(AssetBundleGeneratesRuleFileContent); file.Close(); } else { UnityEngine.Debug.LogWarning(KSwordKitName + ": 该目录下已存在规则文件,无需再次创建!RuleFilePath: " + rulefilepath); } } AssetDatabase.Refresh(); } catch (System.Exception e) { isError = true; Debug.LogError(KSwordKitName + ": 执行 `资源管理/创建规则文件(须选中某位置)` 时,发生错误 -> " + e.Message); } }); EditorUtility.ClearProgressBar(); if (!isError) { UnityEngine.Debug.Log(KSwordKitName + ": 资源管理/创建规则文件(须选中某位置) -> 完成! (" + watch.Elapsed.TotalSeconds + "s)"); } }
public static void ClearMakeAllResourcesMerge() { if (!EditorUtility.DisplayDialog("是否要清理规则文件(全部的或者指定目录的)?", "清理后无法恢复!", "确认清理", "取消操作")) { Debug.Log(KSwordKitName + ": 资源管理/清理规则文件(全部的或者指定目录的) -> 已取消!"); return; } EditorUtility.DisplayProgressBar("清理规则文件(全部的或者指定目录的)", "程序执行中...", 0); bool isError = false; var watch = Watch.Do(() => { try { var objects = Selection.objects; // 没有选中任何资源 if (objects.Length == 0) { eachFile(Application.dataPath, (dir) => { EditorUtility.DisplayProgressBar("清理规则文件(全部的或者指定目录的)", "正在处理:" + dir.Name, Random.Range(0f, 1f)); var rule = System.IO.Path.Combine(dir.FullName, AssetBundleGeneratesRuleFileName); if (System.IO.File.Exists(rule)) { FileUtil.DeleteFileOrDirectory(rule); } var rulemeta = rule + ".meta"; if (System.IO.File.Exists(rulemeta)) { FileUtil.DeleteFileOrDirectory(rulemeta); } }); } else { float i = 0; foreach (var _object in objects) { i++; var path = AssetDatabase.GetAssetPath(_object); EditorUtility.DisplayProgressBar("清理规则文件(全部的或者指定目录的)", "正在处理:" + path, i / objects.Length); if (System.IO.File.Exists(path)) { if (System.IO.Path.GetFileName(path) == AssetBundleGeneratesRuleFileName) { FileUtil.DeleteFileOrDirectory(path); } var rulemeta = path + ".meta"; if (System.IO.File.Exists(rulemeta)) { FileUtil.DeleteFileOrDirectory(rulemeta); } } else if (System.IO.Directory.Exists(path)) { eachFile(path, (dirinfo) => { EditorUtility.DisplayProgressBar("清理规则文件(全部的或者指定目录的)", "正在处理:" + dirinfo.Name, Random.Range(0f, 1f)); var rule = System.IO.Path.Combine(dirinfo.FullName, AssetBundleGeneratesRuleFileName); if (System.IO.File.Exists(rule)) { FileUtil.DeleteFileOrDirectory(rule); } var rulemeta = rule + ".meta"; if (System.IO.File.Exists(rulemeta)) { FileUtil.DeleteFileOrDirectory(rulemeta); } }); } } } AssetDatabase.Refresh(); } catch (System.Exception e) { isError = true; Debug.LogError(KSwordKitName + ": 执行 `清理规则文件(全部的或者指定目录的)` 时,发生错误 -> " + e.Message); } }); EditorUtility.ClearProgressBar(); if (!isError) { UnityEngine.Debug.Log(KSwordKitName + ": 资源管理/清理规则文件(全部的或者指定目录的) -> 完成! (" + watch.Elapsed.TotalSeconds + "s)"); } }
public static void SetAssetLabels() { var objects = Selection.objects; // 没有选中任何资源 if (objects.Length == 0) { UnityEngine.Debug.LogWarning(KSwordKitName + ": 未选中任何资源,无法自动设置标签!"); return; } EditorUtility.DisplayProgressBar("自动设置资源标签(须选中某些资源)", "程序执行中...", 0); bool isError = false; var watch = Watch.Do(() => { try { // 选中的所有文件 var selectedFileList = new List <string>(); foreach (var o in objects) { var path = AssetDatabase.GetAssetPath(o); EditorUtility.DisplayProgressBar("自动设置资源标签(须选中某些资源)", "正在处理:" + path, Random.Range(0f, 1f)); if (System.IO.File.Exists(path)) { var fileinfo = new System.IO.FileInfo(path); selectedFileList.Add(fileinfo.FullName); setABNameByFile(ConvertAssetPathToAssetBundleName(fileinfo.FullName), fileinfo.FullName); } } objects = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets); foreach (var o in objects) { var path = AssetDatabase.GetAssetPath(o); EditorUtility.DisplayProgressBar("自动设置资源标签(须选中某些资源)", "正在处理:" + path, Random.Range(0f, 1f)); if (System.IO.File.Exists(path)) { var fileinfo = new System.IO.FileInfo(path); if (selectedFileList.Contains(fileinfo.FullName)) { continue; } var dir = fileinfo.Directory; var abname = ConvertAssetPathToAssetBundleName(dir.FullName); if (!System.IO.File.Exists(System.IO.Path.Combine(dir.FullName, AssetBundleRuleEditor.AssetBundleGeneratesRuleFileName))) { var dirpath = dir.FullName; var datapath = new System.IO.DirectoryInfo(Application.dataPath).FullName; dirpath = dirpath.Substring(datapath.Length + 1); dirpath = dirpath.Replace('\\', '/'); var dirs = dirpath.Split('/'); var dirname = string.Empty; foreach (var _dir in dirs) { if (string.IsNullOrEmpty(dirname)) { dirname = _dir; } else { dirname = System.IO.Path.Combine(dirname, _dir); } var _path = System.IO.Path.Combine(Application.dataPath, dirname); //Debug.Log("文件: " + path + ", 上层目录:" + _path); if (System.IO.File.Exists(System.IO.Path.Combine(_path, AssetBundleRuleEditor.AssetBundleGeneratesRuleFileName))) { abname = ConvertAssetPathToAssetBundleName(new System.IO.DirectoryInfo(_path).FullName); //Debug.Log("rule 文件存在:" + _path +", 标签:"+ abname); break; } } } setABNameByFile(abname, fileinfo.FullName); } } AssetDatabase.Refresh(); } catch (System.Exception e) { isError = true; Debug.LogError(KSwordKitName + ": 执行 `自动设置资源标签(须选中某些资源)` 时,发生错误 -> " + e.Message); } }); EditorUtility.ClearProgressBar(); if (!isError) { UnityEngine.Debug.Log(KSwordKitName + ": 资源管理/自动设置资源标签(须选中某些资源) -> 完成! (" + watch.Elapsed.TotalSeconds + "s)"); } }