|
|
- using UnityEngine;
- using UnityEditor;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
-
- public class SelectShaderDependencies : EditorWindow
- {
- Vector2 scrollPos = Vector2.zero;
- static private List<string> foundedShaderResources = new List<string>(); //所有使用资源
- [MenuItem("Assets/查找Shader引用", true)]
- static bool SelectShaderDependenciesAvailable()
- {
- return Selection.activeObject != null && Selection.activeObject.GetType() == typeof(Shader);
- }
-
- [MenuItem("Assets/查找Shader引用", false)]
- public static void GetShaderDependencies()
- {
- foundedShaderResources.Clear();
- List<string> includeExtensions = new List<string>() { ".mat" };
- string[] files = Directory.GetFiles(Application.dataPath + "/LuaFramework/AssetBundleRes/scene/", "*.*", SearchOption.AllDirectories)
- .Where(s => includeExtensions.Contains(Path.GetExtension(s).ToLower())).ToArray();
- string path = AssetDatabase.GetAssetPath(Selection.activeObject);
- 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))
- {
- foundedShaderResources.Add(strFile);
- }
- }
- }
- EditorUtility.ClearProgressBar();
- if (foundedShaderResources.Count == 0)
- {
- EditorUtility.DisplayDialog("搜索结果", "没有找到任何材质球引用该Shader", "确定");
- }
- else
- {
- EditorUtility.DisplayDialog("搜索结果", "有" + foundedShaderResources.Count + "个材质球使用了这个Shader", "确定");
- SelectShaderDependencies checkWin = (SelectShaderDependencies)EditorWindow.GetWindow<SelectShaderDependencies>(false, "材质球搜索结果", true);
- checkWin.autoRepaintOnSceneChange = true;
- checkWin.Show();
- }
- }
- void OnGUI()
- {
- ShowShaderDependenciesWindow();
- }
-
- void ShowShaderDependenciesWindow()
- {
- EditorGUILayout.BeginHorizontal();
- GUI.backgroundColor = Color.green;
- EditorGUILayout.EndHorizontal();
- GUI.backgroundColor = Color.white;
- scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
- foreach (var path in foundedShaderResources)
- {
- EditorGUILayout.BeginHorizontal();
- Material t = (Material)AssetDatabase.LoadAssetAtPath(path, typeof(Material));
- EditorGUILayout.ObjectField(t, typeof(Material), false);
- GUI.backgroundColor = Color.green;
- if (GUILayout.Button("查找引用的模型", GUILayout.Width(150)))
- {
- SelectMaterialrDependencies.GetMaterialDependencies(path);
- }
- GUI.backgroundColor = Color.white;
- EditorGUILayout.EndHorizontal();
- }
- EditorGUILayout.EndScrollView();
- }
- }
|