using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEditor.IMGUI.Controls; using UnityEngine; namespace NBF { public static class EditorUtils { /// /// 自动大小 /// /// /// 最大宽 /// 自由大小的序号 public static void AutoWidth(this MultiColumnHeaderState headerState, float maxWidth, int index = 0) { var columns = headerState.columns; if (columns == null) return; var residue = maxWidth - 16; for (int i = 0; i < columns.Length; i++) { var column = columns[i]; if (i != index) { residue -= column.width; } } if (residue < 100) residue = 100; columns[index].width = residue; } /// /// 将一个文件夹复制到另一个文件夹,根据包含的字符串和是否排除参数过滤处理的文件 /// /// 源目录 /// 目标目录 /// 文件路径包含的字符串,用于过滤后缀名 /// 是否排除包含字符串的路径 public static void CopySourceDirToDestDir(string sourceDir, string destDir, string containStr = null, bool exclusion = false) { IList files = Directory.GetFiles(sourceDir, "*.*", SearchOption.AllDirectories); if (!string.IsNullOrEmpty(containStr)) { files = files.FindAll((f) => { bool contain = f.Contains(containStr); return exclusion ? !contain : contain; }); } foreach (string file in files) { string relativePath = file.Substring(sourceDir.Length + 1); string destFilePath = Path.Combine(destDir, relativePath); string destFileDir = Path.GetDirectoryName(destFilePath); if (!Directory.Exists(destFileDir)) { Directory.CreateDirectory(destFileDir); } File.Copy(file, destFilePath, true); } } /// /// 创建新的ScriptableObject资产文件 /// public static void CreateAsset(string fullPath) where T : ScriptableObject { T asset = ScriptableObject.CreateInstance(); string directoryPath = Path.GetDirectoryName(fullPath); if (!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath(fullPath); AssetDatabase.CreateAsset(asset, assetPathAndName); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); EditorUtility.FocusProjectWindow(); Selection.activeObject = asset; } /// /// 获取或创建ScriptableObject资产文件 /// public static T GetOrCreateAsset(string fullPath) where T : ScriptableObject { T asset = AssetDatabase.LoadAssetAtPath(fullPath); if (asset == null) { CreateAsset(fullPath); asset = AssetDatabase.LoadAssetAtPath(fullPath); } return asset; } } }