![](/img/trans.png)
[英]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.