【发布时间】:2020-04-15 20:42:48
【问题描述】:
我的代码中有一个移动协程(每秒移动 1 个单位的距离)。
public IEnumerator Move(int distance){...}
我有一个IEnumerators 列表,它们基本上是这个协程的调用:
public List<IEnumerator> routines = new List<IEnumerator>();
void Start(){ routines.Add(Move(1)); routines.Add(Move(-1)); }
我希望我的对象永远向前和向后移动,所以我尝试了这个:
public IEnumerator LoopMovement(){
while(true){
StartCoroutine(routines[0]);
yield return new WaitForSeconds(1);
StartCoroutine(routines[1]);
yield return new WaitForSeconds(1);
}
}
它在第一个循环中运行良好,但在此之后,它什么也不做。我猜这是因为routines 列表中的IEnumerator 变量已经完成了它们的工作,并且在再次调用时不会重复。如何重置 IEnumerator 变量,以便当我再次调用它时它会执行应有的操作?
【问题讨论】:
-
您可以创建一个命令队列,当有一个项目时,执行它,否则只需等待一秒钟......等等......但这似乎不是一个好方法
标签: unity3d coroutine ienumerator