Unity StopCoroutine无效

时间:2017-09-01 23:53:55

标签: c# unity3d coroutine

我有一个启动协同程序的方法,应该在再次启动之前停止它并重置一些东西。

private Coroutine wholeTutorialRoutine;

public void RunWholeTutorial()
{
    tutorialText.text = "";
    StopAllCoroutines();

    if(wholeTutorialRoutine != null)
    {
        StopCoroutine(wholeTutorialRoutine);
    }

    wholeTutorialRoutine = StartCoroutine(WholeTutorial());

}

private IEnumerator WholeTutorial()
{
    // Wait until after we are done showing this dialouge
    yield return StartCoroutine(ShowDialougForSeconds("tap_to_kill", 5f));

    yield return new WaitForSeconds(5f);

    yield return StartCoroutine(ShowDialougForSeconds("larger_enemies", 5f));

    yield return new WaitForSeconds(5f);

    yield return StartCoroutine(ShowDialougForSeconds("press_button", 7f));

    yield return new WaitForSeconds(3f);

    yield return StartCoroutine(ShowDialougForSeconds("button_colors", 5f));
}

private IEnumerator ShowDialougForSeconds(string diagID, float time)
{
    SetText(diagID);

    tutorialText.GetComponent<Animator>().SetTrigger("FadeIn");

    yield return new WaitForSeconds(time);

    tutorialText.GetComponent<Animator>().SetTrigger("FadeOut");
}

wholeTutorialRoutineCoroutine类型的私有字段。

我觉得那些WaitForSeconds电话会发生一些时髦的事情,但我不太确定是什么。

RunWholeTutorial()连接到一个按钮,所以我想停止当前教程,如果用户一遍又一遍地按下它,则重新开始。

目前发生的事情似乎是协同程序在彼此之上运行。

1 个答案:

答案 0 :(得分:2)

使用class MyScrollListener() : RecyclerView.OnScrollListener() { var currentScrollPosition = 0 override fun onScrolled(view: RecyclerView, dx: Int, dy: Int) { currentScrollPosition += dy if( currentScrollPosition == 0 ) { // We're at the top } } } 代替IEnumeratorCoroutine函数中存储RunWholeTutorial协程函数一次的实例。然后,您可以使用Start变量启动和停止它。

IEnumerator