Unity 中封装协程的奇怪问题

Weird issue in encapsulated coroutines in Unity

我有一个奇怪的问题,我不太明白。 基本上我有 3 个 Classes:A、B 和 C。Class A 和 C 附加到游戏对象,Class B 没有。

Class答:

public class A : MonoBehaviour 
{
    public void Foo() 
    {
        string text = "some text here";
        StartCoroutine(B.Bar(text));
    }
}

Class乙:

public class B : MonoBehaviour 
{
    public IEnumerator Bar(string text) 
    {
        // do some stuff
        yield return Something(text);
    }

    public IEnumerator Something(string text) 
    {
        // do some stuff
        yield return C.FooBar(new List<string>(text.Split(someChar)));
        // wait for C.FooBar and do some more stuff
    }    
}

Class C:

public class C : MonoBehaviour
{
    public IEnumerator FooBar(List<string> names) 
    {
        while (names.Length > 0)
        {
            // do some stuff
            yield return new WaitForEndOfFrame();
            names.RemovaAt(0);
        }

    } 
}

问题是,B.Something(string text) 在每次 yield return 时停止(该函数中还有其他一些 yield returns,我必须等待一些东西).但是昨天经过大量测试后所有这一切都奏效了,我不知道我做错了什么以及为什么这突然不起作用。

你有什么想法吗?

谢谢!

问题是,第一个对象在另一个 class' 协程结束之前被销毁了。我仍然不明白,为什么它昨天已经工作了,但现在我正在等待协程并在它结束后销毁游戏对象,现在它工作正常。