|
|
- using UnityEngine;
- using UnityEditor;
- using System;
- using System.Collections.Generic;
- using UnityEngine.Assertions;
- using UnityEngine.SceneManagement;
- using UnityEditor.SceneManagement;
- using UnityEngine.Internal;
- using System.IO;
- using System.Linq;
-
- public class SelectMaterialrDependencies : EditorWindow
- {
- Vector2 scrollPos = Vector2.zero;
- static private List<string> foundedMaterialResources = new List<string>(); //所有使用资源
- [MenuItem("Assets/查找Material引用", true)]
- static bool SelectMaterialDependenciesAvailable()
- {
- return Selection.activeObject != null && Selection.activeObject.GetType() == typeof(Material);
- }
-
- [MenuItem("Assets/查找Material引用", false)]
- public static void GetMaterialDependencies()
- {
- string path = AssetDatabase.GetAssetPath(Selection.activeObject);
- GetMaterialDependencies(path);
- }
- public static void GetMaterialDependencies(string path)
- {
- foundedMaterialResources.Clear();
- List<string> includeExtensions = new List<string>() { ".prefab" };
- string[] files = Directory.GetFiles(Application.dataPath + "/LuaFramework/AssetBundleRes/scene/", "*.*", SearchOption.AllDirectories)
- .Where(s => includeExtensions.Contains(Path.GetExtension(s).ToLower())).ToArray();
- float count = 0;
- foreach (string file in files)
- {
- count++;
- EditorUtility.DisplayProgressBar("Processing...", "检索中....", count / files.Length);
-
- string strFile = file.Substring(file.IndexOf("Asset")).Replace('\\', '/');
- string[] dependenciesFiles = AssetDatabase.GetDependencies(strFile, false);
- foreach (string depFile in dependenciesFiles)
- {
- if(path.Equals(depFile))
- {
- foundedMaterialResources.Add(strFile);
- }
- }
- }
- EditorUtility.ClearProgressBar();
- if (foundedMaterialResources.Count == 0)
- {
- EditorUtility.DisplayDialog("搜索结果", "没有找到任何模型引用该Material", "确定");
- }
- else
- {
- EditorUtility.DisplayDialog("搜索结果", "有" + foundedMaterialResources.Count + "个模型使用了这个Material", "确定");
- SelectMaterialrDependencies checkWin = (SelectMaterialrDependencies)EditorWindow.GetWindow<SelectMaterialrDependencies>(false, "模型搜索结果", true);
- checkWin.autoRepaintOnSceneChange = true;
- checkWin.Show();
- }
- }
-
- void OnGUI()
- {
- ShowMaterialDependenciesWindow();
- }
-
- void ShowMaterialDependenciesWindow()
- {
- EditorGUILayout.BeginHorizontal();
- GUI.backgroundColor = Color.green;
- EditorGUILayout.EndHorizontal();
- GUI.backgroundColor = Color.white;
- scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
- foreach (var path in foundedMaterialResources)
- {
- EditorGUILayout.BeginHorizontal();
- UnityEngine.Object t = (UnityEngine.Object)AssetDatabase.LoadAssetAtPath(path, typeof(UnityEngine.Object));
- EditorGUILayout.ObjectField(t, typeof(UnityEngine.Object), false);
- GUI.backgroundColor = Color.green;
- GUI.backgroundColor = Color.white;
- EditorGUILayout.EndHorizontal();
- }
- EditorGUILayout.EndScrollView();
- }
- }
|