在 Unity 中结合协程和反射

Combining Coroutines and Reflection in Unity

我想弄清楚如何在 Unity 中将 StartCoroutine()methodInfo.Invoke() 结合使用。

首先,我想避免的非常基本的显式调用代码:

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

但是,现在我无法通过 StartCoroutine() 调用 robotBehaviour

有什么想法吗?

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

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