在Unity中结合协程和反射
本文关键字:反射 结合 Unity | 更新日期: 2023-09-27 17:49:24
我想弄清楚如何才能结合StartCoroutine()与methodInfo.Invoke()在Unity。
首先是我想要避免的非常基本的显式调用代码:
if (ACTION_MOVE == action) {
StartCoroutine(robotBehaviour.move());
}
else if (ACTION_ROTATE == action) {
StartCoroutine(robotBehaviour.rotate());
}
...
被调用的方法如下所示:
public override IEnumerator move()
{
for (int i = 0; i < ITERS; i++) {
// Do something
yield return new WaitForSeconds(N);
}
}
因此,经过一点点反思,我设法动态地进行调用:
RobotBehaviour robotBehaviour = getRobotBehaviour()
Type type = robotBehaviour.GetType();
MethodInfo methodInfo = type.GetMethod((string)sentences[lineNo]);
result = methodInfo.Invoke(robotBehaviour, null);
然而,现在我不能设法调用robotBehaviour与StartCoroutine()。
任何想法?
解决。我需要做的是告诉robotBehaviour启动协程:
RobotBehaviour robotBehaviour = getRobotBehaviour()
Type type = robotBehaviour.GetType();
MethodInfo methodInfo = type.GetMethod((string)sentences[lineNo]);
robotBehaviour.StartCoroutine(methodInfo.Name, 0); // <-- Solved!