Unity 反射(Reflection)

参考

参考视频

基本使用

//step 1 获取对象的描述对象实例
Type t = System.Type.GetType("ReflectionTest");

//step 2 根据描述对象实例,构建一个对象实例
var instance = Activator.CreateInstance(t);

//step 3 对成员变量进行设值
//获取所有成员变量
FieldInfo[] fields = t.GetFields();
//获取单个 fieldInfo
FieldInfo intValue = t.GetField("IntValue");
//设值对象实例的 IntValue 值
intValue.SetValue(instance, 100);

//debug
ReflectionTest reflectionTest = instance as ReflectionTest;
Debug.Log(reflectionTest.IntValue);

//调用成员函数
MethodInfo methodInfo = t.GetMethod("Add");
object[] par = new object[2] { 1, 3 };
object value = methodInfo.Invoke(instance, par);
if(null != value)
{
    Debug.Log((int)value);
}

注意项

补充于2023年3月14日17:59:10

获取成员函数时,如果有重载同名方法,需要传方法参数,否则会获取不到成员函数

 MethodInfo methodInfo = T.GetMethod("Awake",
     BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(GameObject), typeof(UIWindowConfigBindingAttribute) }, null);
 object[] par = new object[] { windowObj, attribute };
 methodInfo.Invoke(instance, par);