Unity中的类,能过正常调用Type.GetType()得不到Type
可能通过程序集取得
Unity有运行时和编辑器时两个程序集,分别为:
- Assembly-CSharp
- Assembly-CSharp-Editor
通过Assembly.GetExecutingAssembly()获取包含当前执行的代码的程序集
//从当前执行的程序集中获取Type
public Type GetType(string TypeName)
{
return System.Reflection.Assembly.GetExecutingAssembly().GetType(TypeName);
}
Unity的官方组件在UnityEngine程序集中,可以通过以下方法获取到
//从UnityEngin中获取
public Type GetUnityType(string TypeName)
{
string namespaceStr = "UnityEngine";
if (!TypeName.Contains(namespaceStr))
TypeName = namespaceStr + "." + TypeName;
var assembly = System.Reflection.Assembly.Load(namespaceStr);
if (assembly == null)
return null;
return assembly.GetType(TypeName);
}
Unty中新增一个Types.GetType()
源码:
//从UnityEngin中获取
public Type GetUnityType(string TypeName)
{
string namespaceStr = "UnityEngine";
if (!TypeName.Contains(namespaceStr))
TypeName = namespaceStr + "." + TypeName;
var assembly = System.Reflection.Assembly.Load(namespaceStr);
if (assembly == null)
return null;
return assembly.GetType(TypeName);
}
故效果和Assembly.Load(assemblyName)
一样。