Unity3D - Нахождение каждого подкласса монобихиора в текущем проекте с отражением - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь найти все типы, которые наследуются от monobehaviour внутри моего проекта Unity. Так что не экземпляры их, а фактические типы в сборке. Я пробовал этот маленький кусочек кода, и я не понимаю, почему он не получает типы. Отладка ведет журнал 0.

Также я собираюсь использовать это в скриптах редактора. Но для целей тестирования я запускаю код в методе запуска компонента.

  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;
        }
    }
...