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' 协程结束之前被销毁了。我仍然不明白,为什么它昨天已经工作了,但现在我正在等待协程并在它结束后销毁游戏对象,现在它工作正常。
我有一个奇怪的问题,我不太明白。 基本上我有 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' 协程结束之前被销毁了。我仍然不明白,为什么它昨天已经工作了,但现在我正在等待协程并在它结束后销毁游戏对象,现在它工作正常。