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

然而,现在我不能设法调用robotBehaviourStartCoroutine()

任何想法?

在Unity中结合协程和反射

解决。我需要做的是告诉robotBehaviour启动协程:

RobotBehaviour robotBehaviour = getRobotBehaviour()
Type type = robotBehaviour.GetType();
MethodInfo methodInfo = type.GetMethod((string)sentences[lineNo]);
robotBehaviour.StartCoroutine(methodInfo.Name, 0);  // <-- Solved!