Unity中封装协同程序中的奇怪问题

时间:2018-05-13 20:32:42

标签: unity3d coroutine

我有一个奇怪的问题,我真的不明白。 基本上我有3个类:A,B和C.A类和C类附加到GameObject,B类没有。

A类:

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

B组:

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
    }    
}

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(字符串文本)在每个yield返回时停止(在该函数中还有一些其他yield返回,我必须等待某些东西)。但是经过大量测试并且我不知道,我做错了什么以及为什么这突然无法正常工作,所有这一切都在昨天起作用。

你有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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