unity编辑器拓展,查找项目中预制体引用的组件或者脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
using System.Reflection;
using System;

public class SearchComponent : EditorWindow
{
    private string componentName = "UnityEngine.UI.Text";
    private string folderPath = "Assets";
    [MenuItem("Tool/SearchComponent")]    
    public static void ShowWindow()
    {
        GetWindow<SearchComponent>("Prefab Browser");
    }

    private void OnGUI()
    {
        folderPath = EditorGUILayout.TextField("文件夹路径:",folderPath);
        componentName = EditorGUILayout.TextField("名字:", componentName);
        if (GUILayout.Button("ListPrefabs")) { 
            ListPrefabsInFolder(folderPath);
        }
    }

    private void ListPrefabsInFolder(string folderPath)
    {
        string[] guids = AssetDatabase.FindAssets("t:Prefab", new string[] { folderPath });
        //获取组件
        Assembly asmb = System.Reflection.Assembly.GetAssembly(typeof(Graphic));
        Type t = asmb.GetType(componentName);

        //获取自定义脚本
        //Assembly asmb1 = System.Reflection.Assembly.Load("Assembly-CSharp");
        //Type t1= asmb1.GetType(componentName);

        foreach (string guid in guids)
        {
            string assetPath = AssetDatabase.GUIDToAssetPath(guid);
            GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(assetPath);
            if (prefab.GetComponentInChildren(t)) Debug.Log(prefab.name);

        }
    }
}
posted on 2024-07-07 18:34  juaa  阅读(3)  评论(0编辑  收藏  举报