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