unity編輯器擴充,查詢專案中預製體引用的元件或者指令碼

juaa發表於2024-07-07

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

        }
    }
}

相關文章