Unity3D-使用反射查找当前项目中的monobehaviour的每个子类

时间:2019-03-16 09:53:10

标签: system.reflection

我试图在Unity项目中找到所有从monobehaviour继承的类型。因此,不是它们的实例,而是程序集中的实际类型。我已经试过这小段代码,但我不明白为什么它没有得到类型。调试记录为0。

我还将在编辑器脚本中使用它。但是出于测试目的,我正在组件的start方法中运行代码。

  using System.Collections.Generic;
    using UnityEngine;
    using System.Reflection;
    using System.Linq;
    using System;

    public class TypeGetter : MonoBehaviour
    {
        private Dictionary<Type, FieldInfo[]> monobehavioursInfo = new Dictionary<Type, FieldInfo[]>();

        private void Start()
        {
            monobehavioursInfo = GetTypes<MonoBehaviour>();
            Debug.Log(monobehavioursInfo.Count);
        }

        private Dictionary<Type, FieldInfo[]> GetTypes<T>()
        {
            Dictionary<Type, FieldInfo[]> temp = new Dictionary<Type, FieldInfo[]>();
            foreach (Type t in Assembly.GetAssembly(typeof(T)).GetTypes()
                .Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(T))))
            {
                FieldInfo[] fields = t.GetFields();
                temp.Add(t, fields);
            }
            return temp;
        }
    }

0 个答案:

没有答案