C# Unity-从foreach循环调用动画
我正在制作一个游戏,当一个特定的函数被调用时,在场景中添加一个随机数或随机事件。我正在尝试制作一个文本框的动画,它一个接一个地告诉你每个效果是什么。我让每个效果向列表中添加一个文本字符串,并使用foreach循环更改文本框中的文本,然后设置动画触发器以使文本框在屏幕上移动。我无法让循环等待动画完成,从而只生成最后的动画效果文本C# Unity-从foreach循环调用动画,c#,animation,unity3d,foreach,C#,Animation,Unity3d,Foreach,我正在制作一个游戏,当一个特定的函数被调用时,在场景中添加一个随机数或随机事件。我正在尝试制作一个文本框的动画,它一个接一个地告诉你每个效果是什么。我让每个效果向列表中添加一个文本字符串,并使用foreach循环更改文本框中的文本,然后设置动画触发器以使文本框在屏幕上移动。我无法让循环等待动画完成,从而只生成最后的动画效果文本 public class UIAnimation : MonoBehaviour { public Animator animator; public
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
}
}
这是因为协同程序的行为就像一个单独的线程。因此,您基本上是以正常的速度在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
}
}
或者你也可以把保龄球的特效变成协同程序,简化一点。非常感谢你,我真是束手无策,这是一个非常简单的解决方案。你救了我一天。