unity查找图片是否有被引用,查找资源引用
·
代码:
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.IO;
public class SearchRefrenceEditorWindow : EditorWindow
{
/// <summary>
/// 查找引用
/// </summary>
[MenuItem("Assets/SearchRefrence")]
static void SearchRefrence()
{
SearchRefrenceEditorWindow window =
(SearchRefrenceEditorWindow) EditorWindow.GetWindow(typeof(SearchRefrenceEditorWindow), false, "Searching",
true);
window.Show();
}
private static Object searchObject;
private List<Object> result = new List<Object>();
private void OnGUI()
{
EditorGUILayout.BeginHorizontal();
searchObject = EditorGUILayout.ObjectField(searchObject, typeof(Object), true, GUILayout.Width(200));
if (GUILayout.Button("Search", GUILayout.Width(100)))
{
result.Clear();
if (searchObject == null)
return;
string assetPath = AssetDatabase.GetAssetPath(searchObject);
string assetGuid = AssetDatabase.AssetPathToGUID(assetPath);
//只检查prefab
string[] guids = AssetDatabase.FindAssets("t:Prefab", new[] {"Assets"});
int length = guids.Length;
for (int i = 0; i < length; i++)
{
string filePath = AssetDatabase.GUIDToAssetPath(guids[i]);
EditorUtility.DisplayCancelableProgressBar("Checking", filePath, i / length * 1.0f);
//检查是否包含guid
string content = File.ReadAllText(filePath);
if (content.Contains(assetGuid))
{
Object fileObject = AssetDatabase.LoadAssetAtPath(filePath, typeof(Object));
result.Add(fileObject);
}
}
EditorUtility.ClearProgressBar();
}
EditorGUILayout.EndHorizontal();
//显示结果
EditorGUILayout.BeginVertical();
for (int i = 0; i < result.Count; i++)
{
EditorGUILayout.ObjectField(result[i], typeof(Object), true, GUILayout.Width(300));
}
EditorGUILayout.EndHorizontal();
}
}
t:Prefab 为类型,不需要改为""即可
或:
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEditor;
public class AssetBeDepend
{
// 存储所有依赖关系
private static Dictionary<string, List<string>> referenceCacheDic;
// 在 Assets 文件件下鼠标右键弹板中添加按钮 AssetBeDepend
[MenuItem("Assets/AssetBeDepend")]
static void Select()
{
referenceCacheDic = new Dictionary<string, List<string>>();
CollectDepend();
// 获取所有选中 文件、文件夹的 GUID
string[] guids = Selection.assetGUIDs;
foreach (var guid in guids)
{
// 将 GUID 转换为 路径
string assetPath = AssetDatabase.GUIDToAssetPath(guid);
IsBeDepend(assetPath);
}
}
// 收集项目中所有依赖关系
static void CollectDepend()
{
int count = 0;
// 获取 Assets 文件夹下所有资源
string[] guids = AssetDatabase.FindAssets("");
foreach (string guid in guids)
{
// 将 GUID 转换为路径
string assetPath = AssetDatabase.GUIDToAssetPath(guid);
// 获取文件所有直接依赖的资源
string[] dependencies = AssetDatabase.GetDependencies(assetPath, false);
foreach (var filePath in dependencies)
{
// dependency 被 assetPath 依赖了
// 将所有依赖关系存储到字典中
List<string> list = null;
if (!referenceCacheDic.TryGetValue(filePath, out list))
{
list = new List<string>();
referenceCacheDic[filePath] = list;
}
list.Add(assetPath);
}
count++;
EditorUtility.DisplayProgressBar("Search Dependencies", "Dependencies",
(float)(count * 1.0f / guids.Length));
}
EditorUtility.ClearProgressBar();
}
// 判断文件是否被依赖
static bool IsBeDepend(string filePath)
{
List<string> list = null;
if (!referenceCacheDic.TryGetValue(filePath, out list))
{
return false;
}
bool isMan = false;
// 将依赖关系打印出来
foreach (var file in list)
{
Debug.LogError(filePath + " 被:" + file + " 引用", AssetDatabase.LoadAssetAtPath<Object>(file));
}
return true;
}
}
更多推荐
所有评论(0)