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);