源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

81 lines
3.2 KiB

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();
}
}