在下面的代码中,班级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
?
答案 0 :(得分:0)
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;