Ich habe eine Methode, um eine Coroutine zu starten, und sollte sie anhalten und einige Dinge zurücksetzen, bevor ich sie erneut starte.Unity StopCoroutine funktioniert nicht
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
ist ein privates Feld vom Typ Coroutine
.
Ich habe das Gefühl, dass etwas funky passiert mit diesen WaitForSeconds
Anrufe, aber ich bin mir nicht ganz sicher was.
RunWholeTutorial()
ist an eine Schaltfläche angeschlossen, also möchte ich das aktuelle Tutorial anhalten und neu starten, wenn der Benutzer es immer und immer wieder drückt.
Momentan scheint es so zu sein, dass die Coroutinen übereinander laufen.
Haben Sie versucht, den Aufruf von StopAllCoroutines unter der Anweisung if zu ändern? – z3nth10n
Ja ich habe, das ändert nichts – BenjaFriend
Entfernen Sie die 'StopAllCoroutines' und sehen, was passiert. Es wäre gut zu zeigen, wie 'wholeTutorialRoutine' deklariert wird – Programmer