【发布时间】:2017-09-01 23:53:55
【问题描述】:
我有一个启动协程的方法,应该停止它并在重新启动它之前重置一些东西。
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");
}
wholeTutorialRoutine 是 Coroutine 类型的私有字段。
我觉得那些WaitForSeconds 调用发生了一些奇怪的事情,但我不太确定是什么。
RunWholeTutorial() 连接到一个按钮,所以我想停止当前的教程,如果用户一遍又一遍地按下它,然后重新开始。
目前发生的情况似乎是协同程序在彼此之上运行。
【问题讨论】:
-
您是否尝试过在 if 语句下更改对 StopAllCoroutines 的调用?
-
是的,我有,这不会改变任何事情
-
删除
StopAllCoroutines看看会发生什么。最好展示一下wholeTutorialRoutine是如何声明的 -
wholeTutorialRoutine = StartCoroutine(WholeTutorial());7 行下来 -
我问它是如何声明的而不是它是如何初始化的。再次删除 StopAllCoroutines 时会发生什么?