2015-05-16 2 views
0

Я пытаюсь понять, как я могу объединить 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().

Любые идеи?

ответ

1

Решено. Что мне нужно было сделать, так это сказать роботуБехавиру начать запуск сопрограммы:

RobotBehaviour robotBehaviour = getRobotBehaviour() 
Type type = robotBehaviour.GetType(); 
MethodInfo methodInfo = type.GetMethod((string)sentences[lineNo]); 
robotBehaviour.StartCoroutine(methodInfo.Name, 0); // <-- Solved! 
Смежные вопросы