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 !");
}
}