[英]Wait for a coroutine to finish before moving on with the function C# Unity
[英]Waiting for coroutine to finish before moving forward
所以我有这个协程将一个对象移动到一个地方,我为一个对象列表做这个,但我希望它一个一个移动它们(也就是在开始一个新的之前等待前一个协程完成)但是添加任何yields 只是停止了整个事情......我有点不明白为什么。
我试过添加“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()......我一直想知道为什么它不会移动
要等待协程,您希望将当前所在的方法更改为协程,然后像这样生成新的协程:
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 的这个回答:
创建协程时,Unity 将其附加到 MonoBehaviour 对象。 它将首先在 StartCoroutine 调用时运行,直到命中。 然后它将从协程返回并根据产量将其放入堆栈中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.