我制作的游戏在调用特定函数时会向场景中添加随机数或随机事件。我试图动画一个文本框,告诉每个效果是一个接一个。我有每个效果添加一个文本字符串到List并使用foreach循环来更改文本框中的文本,然后设置动画触发器以动画在屏幕上移动的框。我无法让循环等到动画完成后导致只有最后的效果文本被动画化。
public class UIAnimation : MonoBehaviour {
public Animator animator;
public Text NBtext;
public GameObject NBEffect;
public void NiceBowlingEffects(List<string> Effects)
{
foreach (var Effect in Effects)
{
NBtext.text = Effect;
print(Effect);
StartCoroutine(Animate());
}
}
private IEnumerator Animate()
{
animator.SetTrigger("SlideText");
yield return new WaitForSeconds(.75f); //animation is .7 seconds
}
}
答案 0 :(得分:1)
这是因为协同程序行为就像一个单独的线程。因此,您基本上以正常速度循环遍历forloop,几乎同时启动所有协同程序,因此几乎同时设置所有动画触发器。您需要做的是将延迟放在循环中。
public void NiceBowlingEffects(List<string> Effects)
{
StartCoroutine(Animate(Effects));
}
private IEnumerator Animate(Effects)
{
foreach (var Effect in Effects)
{
NBtext.text = Effect;
print(Effect);
animator.SetTrigger("SlideText");
yield return new WaitForSeconds(.75f); //animation is .7 seconds
}
}
或者你可以让NiceBowlingEffects协同本身并简化一下。