来自 foreach 循环的 Unity 动画 C#

Unity animation from foreach loop c#

我有一个 UI 文本,我在镜头外的脚本中更新了它,然后使用动画让它在屏幕上滑动。该脚本使用 foreach 循环,因为文本更改和动画运行的次数是可变的。它总是跳过第三个动画(它会在控制台打印效果但不会播放那个动画),即使调用了 4 或 5 个效果。

private Animation Anim;
public Text NBtext;
public GameObject NBEffect, Tut, TouchInput;

public IEnumerator NiceBowlingEffects(List<string> Effects, bool FirstFrame)
{
    Anim = GetComponent<Animation>();
    NBEffect.SetActive(true);
    yield return new WaitForSeconds(.2f); //give frame ect a chance to load.
    foreach (var Effect in Effects)
    {
        NBtext.text = Effect;
        Print(Effect);
        Anim.Play();
        yield return new WaitForSeconds(Anim.clip.length);
    }
    NBEffect.SetActive(false);
    if (FirstFrame)
    {
        Tut.SetActive(true);
    }
    TouchInput.SetActive(true);
}

尝试在 foreach 循环中将“WaitForSeconds”更改为“WaitForSecondsRealtime”,并告诉我它是否已修复

希望这对某人有所帮助,但为了最终使它适用于 Nice Bowling,我不得不在更改文本和播放动画之间添加时间延迟。这是 运行 现在 Nice Bowling 上的代码。

public IEnumerator NiceBowlingEffects(List<string> Effects, bool FirstFrame)
{
    Anim = GetComponent<Animation>();
    NBEffect.SetActive(true);
    yield return new WaitForSecondsRealtime(.1f); //give frame ect a chance to load.
    foreach (var Effect in Effects)
    {
        NBtext.text = Effect;
        yield return new WaitForSecondsRealtime(.1f); //text time to change
        Anim.Play();
        yield return new WaitForSecondsRealtime(Anim.clip.length +.01f);
    }
    NBEffect.SetActive(false);
    if (FirstFrame)
    {
        Tut.SetActive(true);
        Tut.GetComponent<UISprite>().Trigger();
    }
    TouchInput.SetActive(true);
}