簡體   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