这个问题是针对Unity3D的实用程序脚本的,但问题仅在C#中。
我为脚本提供了字符串(onClickCallbackPath
),看起来像“ GameObjectName.ComponentTypeName.CallbackDelegateName”。
查找GameObject和Component没问题,但请看以下代码:
string[] ss = onClickCallbackPath.Split ("." [0]);
Transform onClickTarget = Tools.FindDeepChild (transform.root, ss [0]);
MonoBehaviour[] allComponentsOnTarget = onClickTarget.GetComponents<MonoBehaviour> ();
foreach (MonoBehaviour mb in allComponentsOnTarget)
{
if (mb.GetType ().Name == ss [1])
{
MethodInfo[] methods = mb.GetType ().GetMethods (BindingFlags.Public);
foreach (MethodInfo mi in methods)
{
if (mi.Name == ss [2])
{
// And here is how I imagine it to work, and look for something similar...
// but of course there is no GetInstance method in MethodInfo
Action a = (Action) mi.GetInstance(mb);
break;
}
}
break;
}
}
如您所见,我需要在我发现的MonoBehaviour中找到Action
类型的对象(我确保它是具有正确签名的方法)。
我试图查看所有MethodInfo属性,使其具有与我正在寻找的类似的东西,还尝试在网络中找到解决方案(也在SO上找到),但没有成功。我打赌寻找解决方案的问题只是错误地命名问题。
但我希望你能理解我的问题。
任何帮助表示赞赏。
参考方案
您正在寻找的是
(Action)Delegate.CreateDelegate(typeof(Action), mb, mi)
C#:使用System.Reflection.GetFields()显示字段元数据 - c#This question already has answers here: Closed 8 years ago. Possible Duplicate: Find a private field with Reflection?我正在尝试使用System.Reflection.GetFields()方法显示类的字段名称。问题是,仅当字段被声明为“ pu…
LeetCode题解计算机为什么是基于二进制的?可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制
LeetCode题解统计城市的所有灯泡这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…
LeetCode题解黑白圆盘一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可
LeetCode题解圆上任取三点构成锐角三角形的概率来自字节跳动的一道几何题题解:1/4