Я пытаюсь найти все типы, которые наследуются от 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;
}
}