Unity查找某个资源的引用位置

unity中实现查找某个资源被prefab等引用的位置。首先需要在Project Setting的Editor中把Asset Serialization的Mode改成Force Text形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
EditorSettings.serializationMode = SerializationMode.ForceText;
string path = AssetDatabase.GetAssetPath(Selection.activeObject);
if (!string.IsNullOrEmpty(path))
{
string guid = AssetDatabase.AssetPathToGUID(path);
List<string> withoutExtensions = new List<string>(){".prefab",".unity",".mat",".asset"};
string[] files = Directory.GetFiles(Application.dataPath, "*.*", SearchOption.AllDirectories)
.Where(s => withoutExtensions.Contains(Path.GetExtension(s).ToLower())).ToArray();
int startIndex = 0;
for (; startIndex < files.Length; startIndex++) { string file = files [startIndex];
EditorUtility.DisplayCancelableProgressBar ("匹配资源中", file, (float)startIndex / (float)files.Length);
if (Regex.IsMatch (File.ReadAllText (file), guid)) {
Debug.Log (file, AssetDatabase.LoadAssetAtPath<Object> (GetRelativeAssetsPath (file)));
}
}
EditorUtility.ClearProgressBar ();
Debug.Log ("查找结束");
}