如何将 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一样对待它?

如何将 GetField() 的结果转换为可用的对象

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;