繁体   English   中英

在继续之前等待协程完成

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM