做配置表工具的时候,用到通过类名获取类的Type:
Type type = Type.GetType(_className)
发现一个问题,在Unity运行代码中创建一个类:通过GetType能正常获取该类的Type,但是在编辑器代码中,Get出来的却是null。
猜想在当前的Assembly中没有该类。
Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
在两个代码中获取当前的程序集,发现是两个不同的程序集:Assembly-CSharp、Assembly-CSharp-Editor,怪不得在Editor中获取不到所选的类型,Assembly-CSharp-Editor中根本就没有这个类。
在需要获取的类的程序集里面创建一个静态函数,就能获取到了。
public Type GetConfigType(string className)
{
return Type.GetType(className);
}
public Type GetConfigTypeByAssembley(string className)
{
Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
if (assembly == null)
{
return null;
}
Type _type = assembly.GetType(className);
return _type;
}
获取当前所有程序集:
Assembly[] all = AppDomain.CurrentDomain.GetAssemblies();
2021.3.25
Dll库里面调用Unity类里面的方法:
先加载程序集,通过程序集获取到Type,创建对象,获取方法。
public static void ShowTest()
{
Assembly assembly = System.Reflection.Assembly.Load("Assembly-CSharp");
Type _type = assembly.GetType("TestScript1");
if (_type!=null)
{
object _obj = assembly.CreateInstance(_type.FullName); //Activator.CreateInstance(_type);
MethodInfo methodInfo = _type.GetMethod("ShowTest", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod);
if (methodInfo != null)
{
methodInfo.Invoke(_obj, null);
}
}
}