C# 为什么内部有两个循环的ienumerator只工作一次?
首先:C# 为什么内部有两个循环的ienumerator只工作一次?,c#,unity3d,unity5,C#,Unity3d,Unity5,首先: StartCoroutine(moveStuff()); 然后: IEnumerator moveStuff() { for(int i=0;i0.1f) { 计数器++; endPos=allLines[i].GetComponent().EndVector; Vector3 startPos=allLines[i].GetComponent().GetPosition(0); Vector3 tempPos=Vector3.Lerp(起始位置、结束位置、计数器/500f*速度);
StartCoroutine(moveStuff());
然后:
IEnumerator moveStuff()
{
for(int i=0;i0.1f)
{
计数器++;
endPos=allLines[i].GetComponent().EndVector;
Vector3 startPos=allLines[i].GetComponent().GetPosition(0);
Vector3 tempPos=Vector3.Lerp(起始位置、结束位置、计数器/500f*速度);
所有行[i].GetComponent().SetPosition(1,tempPos);
instancesToMove[i].transform.position=
矢量3.向(起始位置、结束位置、计数器/25f*速度)移动;
//走向目的地
收益返回空;
}
}
}
在第一次使用断点进行迭代时,我可以看到allLines和instancestoMove中的第一个对象正在移动。但是,它只是显示列表中的所有其他对象,而不是移动下一个对象,就像它们已经被移动一样
列表中的其余对象已显示在其结束位置。
它们没有像第一圈那样的运动
allLines和instancesToMove都是列表类型。也许您应该在while语句之前将计数器重置为零。 否则计数器/25f*的速度会无限制地增长,并且对于后续的行来说会越来越高
IEnumerator moveStuff()
{
for (int i = 0; i < allLines.Count; i++)
{
while (Vector3.Distance(instancesToMove[i].transform.position, endPos) > 0.1f)
{
counter++;
endPos = allLines[i].GetComponent<EndHolder>().EndVector;
Vector3 startPos = allLines[i].GetComponent<LineRenderer>().GetPosition(0);
Vector3 tempPos = Vector3.Lerp(startPos, endPos, counter / 500f * speed);
allLines[i].GetComponent<LineRenderer>().SetPosition(1, tempPos);
instancesToMove[i].transform.position =
Vector3.MoveTowards(startPos, endPos, counter / 25f * speed);
//move towards destination
yield return null;
}
}
}