【发布时间】:2019-11-01 09:21:23
【问题描述】:
所以我有一个将对象移动到一个地方的协程,我为一个对象列表执行此操作,但我希望它一个一个地移动它们(也就是等到前一个协程完成后再开始一个新的协程)但是添加任何产量只会阻止整个事情......我有点不知道为什么。
我尝试添加“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() 在使该方法成为协程之后……我一直想知道为什么它不会移动
【问题讨论】:
-
你的循环是否也在协程中被调用?
-
@derHugo 如果是,它会完全停止移动