我试图在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;
}
}