Странная проблема в инкапсулированных сопрограммах в Unity - PullRequest
0 голосов
/ 13 мая 2018

У меня странная проблема, которую я не совсем понимаю.В основном у меня есть 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 (текст строки) останавливается при каждом возврате доходности (в этой функции есть некоторые другие возвраты доходности, где я должен ждатьдля чего-то).Но все это сработало вчера после множества испытаний, и я не знаю, что я делаю неправильно и почему это вдруг не работает.

У вас есть какие-нибудь идеи?

Спасибо!

1 Ответ

0 голосов
/ 14 мая 2018

Проблема заключалась в том, что первый объект был уничтожен до того, как закончилась сопрограмма другого класса. Я до сих пор не понимаю, почему это уже сработало вчера, но теперь я жду сопрограмму и уничтожу игровой объект после его завершения, и теперь он работает нормально.

...