Unity中通过类名字符串取组件类型的方法(Types.GetType用法)

时间:2023-03-08 17:40:17

正常调用Type.GetType取不到组件,因为会先创建实例在获取,而Unity组件无法通过new来创建。

第二种创建方式是通过程序集,具体如下

Assembly.GetExecutingAssembly().GetType(typeName);

但是Unity分为两种程序集,运行时和编辑器时,这两种程序集的名字分别是:

Assembly-CSharp

Assembly-CSharp-Editor

所以取指定程序集,更好的方法是这么取:

var assembly = Assembly.Load(assemblyName);
assembly.GetType(typeFullName);

Unity后续版本的API中,新增加了一个Types类,通过Types.GetType可以很方便的获取:

Types.GetType(item.ComponentName, "Assembly-CSharp");

注意,上面的方式只能取到自定义组件,Unity的官方组件在UnityEngine程序集中,但不能通过Types来获取

可以用第二种方法来取,亲测可用

var assembly = Assembly.Load("UnityEngine");
Debug.Log("assembly: " + assembly);
Debug.Log(assembly.GetType("UnityEngine.GameObject"));

//assembly: UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
//UnityEngine.GameObject