Unity - 从foreach循环调用动画

时间:2018-01-30 19:21:05

标签: c# animation unity3d foreach

我制作的游戏在调用特定函数时会向场景中添加随机数或随机事件。我试图动画一个文本框,告诉每个效果是一个接一个。我有每个效果添加一个文本字符串到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
    }
}

1 个答案:

答案 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协同本身并简化一下。