2018-12-10
public string fullPath = "Assets/res/ui/"; MonoScript scriptObj = null; int loopCount = 0; List<Transform> results = new List<Transform>(); static ScaleOne window; [MenuItem("Zhu/Find Script/Go")] static void Execute() { if (window == null) { window = (ScaleOne)GetWindow(typeof(ScaleOne)); } window.Show(); } private void OnGUI() { //--------------------------------------------------- GUILayout.Label("查找所有带此脚本的预制体。拖入脚本:"); scriptObj = (MonoScript)EditorGUILayout.ObjectField(scriptObj, typeof(MonoScript), true); if (GUILayout.Button("Find")) { results.Clear(); loopCount = 0; Debug.Log("开始查找."); FindScript(); } } 获取指定路径下面的所有资源文件 void FindScript() { List<string> prefabs_names = new List<string>(); if (Directory.Exists(fullPath)) { DirectoryInfo direction = new DirectoryInfo(fullPath); FileInfo[] files = direction.GetFiles("*", SearchOption.AllDirectories); for (int i = 0; i < files.Length; i++) { if (files[i].Name.EndsWith(".prefab")) { string ab_name = "ui/"; if (files[i].Directory.Name != "ui") { ab_name += files[i].Directory.Name + "/"; } prefabs_names.Add(ab_name + files[i].Name.Split('.')[0]); } } } if (scriptObj != null) { for (int i = 0; i < prefabs_names.Count; i++) { loopCount++; string[] str1 = AssetDatabase.GetAssetPathsFromAssetBundle(prefabs_names[i]); if (str1.Length < 1) { continue; } GameObject go = AssetDatabase.LoadAssetAtPath(str1[0], typeof(System.Object)) as GameObject; if (go != null) { var thetype = scriptObj.GetClass(); Component[] co = go.GetComponentsInChildren(thetype, true); foreach (var _child in co) { Debug.Log("<color=darkblue>Find it: " + go.name + "--->>" + _child.name + "</color>"); results.Add(_child.transform); } } } } if (results.Count <= 0) { Debug.LogError("Oops: Cant find that you want !"); } }