如何将 GetField() 的结果转换为可用的对象
本文关键字:转换 对象 结果 GetField | 更新日期: 2023-09-27 18:30:51
在下面的代码中,类ButtonScript
有一个名为buttonObj
的字段,其类型为GameObject
var button = gameObject.AddComponent<ButtonScript>();
var obj = button.GetType().GetField("buttonObj");
Debug.Log(obj); //prints UnityEngine.GameObject
Debug.Log(obj.name); //compilation error
最后一行的错误是:
Type 'System.Reflection.FieldInfo' does not contain a definition for 'name'...
为什么它在记录时说它是一个GameObject
,但当我尝试使用它时说它是一个FieldInfo
的对象?
怎样才能得到它,这样我才能像对待GameObject
一样对待它?
obj
变量的类型是 FieldInfo
而不是 GameObject
。
FieldInfo
类表示有关buttonObj
字段的元数据信息。它不包含其值。
要获取其值,您必须使用 GetValue
方法,如下所示:
var button = gameObject.AddComponent<ButtonScript>();
var field = button.GetType().GetField("buttonObj");
//Assuming that the type of the field is GameObject
var obj = (GameObject)field.GetValue(button);
var name = obj.name;