在 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!
我想弄清楚如何在 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!