我如何让团结等到我的动画完成

时间:2017-04-24 11:26:54

标签: unity3d delay yield coroutine ienumerator

我正在进行一个团结项目,我也希望在淡入和淡出动画的场景之间切换。 动画已经完成,我可以访问它们,但是我正在使用教程中的yield和Ienumerator函数,但是我无法使它工作。

//from my animation script
public IEnumerator fadeIn()
{
    isFading = true;
    animator.SetTrigger("FadeIn");
    while (isFading)
    {
        yield return new WaitForSeconds(3f);
    }
}

// from my main menu script.
public void btnPlay()
{
    StartCoroutine(fadeIn());
    Debug.Log("AfterIn");
    SceneManager.LoadScene("playOptions");
    StartCoroutine(fadeOut());
    Debug.Log("AfterOut");
}

IEnumerator fadeIn()
{
    yield return StartCoroutine(animatorscript.fadeIn());
}
IEnumerator fadeOut()
{
    yield return StartCoroutine(animatorscript.fadeOut());
}

我已经更新了我的问题。但是当我运行它时,我看不到动画。它直接指向下一个场景,并在彼此之后直接调试消息。

1 个答案:

答案 0 :(得分:1)

当您想要开始使用Coroutine时,您需要像StartCoroutine(fadeIn)一样调用它yield return StartCoroutine(animatorscript.fadeIn())

所以你需要追加

public void btnPlay()
{
    StartCoroutine(fadeIn);
    SceneManager.LoadScene("playOptions");
    StartCoroutine(fadeOut);
}

有关StartCoroutine

的详情,请参阅here

更新:关于你更新的问题,我假设你希望等到fadein完成加载场景。

这样的事情可以解决问题;

public void btnPlay()
{
    StartCoroutine(SceneFadeAndLoad);
}

IEnumerator SceneFadeAndLoad()
{
    yield return StartCoroutine(fadeIn);
    SceneManager.LoadScene("playOptions");
    yield return StartCoroutine(fadeOut);
}