AkiraPixelWind/Assets/Scripts/Editor/ProjectTools/AssetRefSearchTool.cs
2022-12-29 18:20:40 +08:00

77 lines
2.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections.Generic;
using System.IO;
using System.Threading;
using UnityEditor;
using UnityEngine;
public static class AssetRefSearchTool
{
#if UNITY_EDITOR
static string[] assetGUIDs;
static string[] assetPaths;
static string[] allAssetPaths;
static Thread thread;
[MenuItem("项目工具/资源检查/查找资源被引用Project选中的", false)]
static void FindAssetRefMenu()
{
if (Selection.assetGUIDs.Length == 0)
{
Debug.Log("请先选择任意一个组件,再击此菜单");
return;
}
assetGUIDs = Selection.assetGUIDs;
assetPaths = new string[assetGUIDs.Length];
for (int i = 0; i < assetGUIDs.Length; i++)
{
assetPaths[i] = AssetDatabase.GUIDToAssetPath(assetGUIDs[i]);
}
allAssetPaths = AssetDatabase.GetAllAssetPaths();
thread = new Thread(new ThreadStart(FindAssetRef));
thread.Start();
}
static void FindAssetRef()
{
Debug.Log(string.Format("开始查找引用{0}的资源。", string.Join(",", assetPaths)));
List<string> logInfo = new List<string>();
string path;
string log;
for (int i = 0; i < allAssetPaths.Length; i++)
{
path = allAssetPaths[i];
if (path.EndsWith(".prefab") || path.EndsWith(".unity"))
{
string content = File.ReadAllText(path);
if (content == null)
{
continue;
}
for (int j = 0; j < assetGUIDs.Length; j++)
{
if (content.IndexOf(assetGUIDs[j]) > 0)
{
log = string.Format("{0} 引用了 {1}", path, assetPaths[j]);
logInfo.Add(log);
}
}
}
}
for (int i = 0; i < logInfo.Count; i++)
{
Debug.Log(logInfo[i]);
}
Debug.Log("选择对象引用数量:" + logInfo.Count);
Debug.Log("查找完成");
}
#endif
}