项目Assets资源导入时,常常会有重复的资源多次被导入,导致项目冗余,这里一个小工具可以在导入时检测,即时给你提示
只需要在Editor文件中创建下列两个脚本:
using System.IO;
using System.Text.RegularExpressions;
using UnityEditor;
public class OverwriteAsset
{
public string originalAssetPath {
get {
return Path.Combine (directoryName, filename + "." + extension);
}
}
public bool exists { get; private set; }
public string filename { get; private set; }
public string extension { get; private set; }
private string directoryName;
private string assetPath;
const string pattern = "^(?<name>.*)\\s\\d+\\.(?<extension>.*)$";
public OverwriteAsset (string assetPath)
{
this.assetPath = assetPath;
directoryName = Path.GetDirectoryName (assetPath);
var match = Regex.Match (Path.GetFileName (assetPath), pattern);
exists = match.Success;
if (exists) {
filename = match.Groups ["name"].Value;
extension = match.Groups ["extension"].Value;
}
}
public void Overwrite ()
{
FileUtil.ReplaceFile (assetPath, originalAssetPath);
Delete ();
AssetDatabase.ImportAsset (originalAssetPath);
}
public void Delete ()
{
AssetDatabase.DeleteAsset (assetPath);
}
}
using UnityEditor;
using UnityEngine;
public class Overwriter : AssetPostprocessor
{
const string message = "\"{0}.{1}\"资源已经存在,是否更新资源?";
static void OnPostprocessAllAssets (
string[] importedAssets,
string[] deletedAssets,
string[] movedAssets,
string[] movedFromPath)
{
if (Event.current == null || Event.current.type != EventType.DragPerform)
return;
foreach (var assetPath in importedAssets) {
var asset = new OverwriteAsset (assetPath);
if (asset.exists) {
var overwriteMessage =
string.Format (message, asset.filename, asset.extension);
var result = EditorUtility.DisplayDialogComplex (asset.originalAssetPath,
overwriteMessage,
"替换",
"保留两者",
"中止");
if (result == 0) {
asset.Overwrite ();
} else if (result == 2) {
asset.Delete ();
}
}
}
}
}
本文链接:http://blog.csdn.net/WarrenMondeville/article/details/53807605