我正在制作一个游戏,当一个特定的函数被调用时,它会给场景添加一个随机数或随机事件。我试图动画一个文本框,告诉每个效果是一个接一个。我有每一个效果添加一个文本字符串到一个列表,并使用一个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
}
}
发布于 2018-01-30 19:35:41
这是因为一个协同线的作用就像一个分离的线程。所以你基本上是以正常的速度循环你的f循环,几乎在同一时间启动所有的协同线,因此在几乎同一时间设置所有的动画触发器。您需要做的是在循环本身中放置延迟。
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本身作为协同线,并将其简化一些。
https://stackoverflow.com/questions/48529010
复制相似问题