【发布时间】:2021-06-21 17:58:09
【问题描述】:
我有一个游戏对象数组,我正在循环遍历该数组,以便为每个游戏对象设置一个延迟的材质动画。我正在使用协程,以便在其中使用 WaitForSeconds 和 for 循环来为每个对象添加延迟。
最终会发生的是数组中的所有对象都被选中,因此动画会发生在所有对象上,而不是一次只发生一个对象
我正在寻找的,只有在索引处选择的立方体来改变颜色并恢复以前立方体的颜色。
我怎样才能做到这一点?
public GameObject[] laneMat;
void Update()
{
StartCoroutine(matColor(laneMat, .3f));
}
IEnumerator matColor(GameObject[] gameObject, float delay)
{
time += Time.deltaTime;
for (int i = 0; i < laneMat.Length; i++)
{
if (duration > time)
{
laneMat[i].GetComponent<Renderer>().material.SetColor("_Color", Color.red);
yield return new WaitForSeconds(delay);
}
else if (time > duration && time < duration + .3f)
{
Renderer render = GetComponent<Renderer>();
render.material.SetColor("_Color", originalColor);
yield return null;
}
}
}
我尝试使用 List 并在第一个循环中创建另一个循环来选择预览立方体并使用 removeAt() 删除它们,但它有点紧张,而不是我正在寻找的效果
【问题讨论】:
-
欢迎来到 Stack Overflow!您能否添加此代码当前的功能以及它与您的预期输出有何不同?它可以帮助用户尝试理解您的问题。我不太明白这里的问题,但我会小心让协程更新方法:协程将在每一帧触发。你有没有考虑把协程放在 Start 方法中,让协程永远循环?
-
感谢您的评论,我有更新中的协程,因为我在一定时间内做动画,当时间结束时,数组中选择的所有游戏对象都会恢复到原来的颜色。 .我有更大的代码,我没有包括我不想引起更多的混乱,但我想我应该有。我将编辑帖子
-
你绝对不应该每一帧都启动一个新的 Corotuine!您将获得数百个同时运行的例程 ....
标签: c# arrays list for-loop unity3d