所以我有这个协程将一个对象移动到一个地方,我用它来处理一系列对象,但是我希望它将它们一个一个地移动(也就是等到以前的协程完成后再开始一个新的协程)。但是增加任何收益只会使整个事情停顿下来……我有点迷失了为什么。
我曾经尝试添加“ yield return new WaitUnitl()”或“ WaitForSeconds”,但是无论我在何处放置,它要么让它等待一次移动所有内容,要么它们就停止了一次移动
移动代码:
public IEnumerator MoveObject(Vector3 source, Vector3 target, float overTime)
{
float startTime = Time.time;
while (Time.time < startTime + overTime)
{
transform.position = Vector3.Lerp(source, target, (Time.time - startTime) / overTime);
yield return null;
}
transform.position = target;
}
在此for循环中调用:
for (int i = 0; i < CardsInHand.Count; i++)
{
Card c = CardsInHand[i];
Vector3 target = new Vector3(startt + (1.5f * i), transform.position.y);
StartCoroutine(c.MoveObject(c.transform.position, target, 1));
c.GetComponent<SpriteRenderer>().sortingOrder = i;
}
希望他们一次移动一次,而不是一次全部移动
编辑:好吧,我有史以来最大的屁。...在将该方法设为协程之后,我忘记使用StartCoroutine()了,我一直想知道为什么它不会移动
答案 0 :(得分:1)
要等待协程,您想将当前使用的方法更改为在协程中,然后像这样生成新的协程:
IEnumerator MyMethod()
{
for (int i = 0; i < CardsInHand.Count; i++)
{
Card c = CardsInHand[i];
Vector3 target = new Vector3(startt + (1.5f * i), transform.position.y);
yield return StartCoroutine(c.MoveObject(c.transform.position, target, 1));
c.GetComponent<SpriteRenderer>().sortingOrder = i;
}
}
来自{Everts的this答案:
创建协程时,Unity会将其附加到MonoBehaviour对象。它将首先在StartCoroutine上调用,直到达到产量为止。然后它将从协程返回并根据产量将其放置到堆栈上。