当你有嵌套的协同程序,如
7
void Update()
{
if(someTest)
{
StartCoroutine(Foo());
}
}
IEnumerator Foo()
{
doStuff = true;
yield return StartCoroutine(Bar());
doStuff = false;
}
IEnumerator Bar()
{
//Very important things!
}
中的StartCoroutine
是否必要?
我们是否可以做到
yield return StartCoroutine(Bar());
如果我们被允许,这是否会对程序行为/性能产生任何影响?
答案 0 :(得分:6)
收益率中的StartCoroutine是否返回StartCoroutine(Bar()); 必要?
否,您可以使用yield return Bar();
。
行为和性能问题如果我们被允许,这是否会对该计划产生任何影响 行为/性能?
是。
差异:
<强> yield return StartCoroutine(coroutineFunction())
强>
Bar
)将在产生之前启动 StartCoroutine
开始继续运行。 <强> yield return coroutineFunction()
强>
Bar
)将在屈服后启动 yield return coroutineFunction()
开始也被杀死了。
这一点非常重要,特别是当您需要停止时
父母与他们的孩子协调。更快:
可能是因为它分配的内存较少。在for
循环中使用时
它比yield return StartCoroutine(coroutineFunction())
快。
即使它有更多的呼叫,这甚至是正确的。此外,时间和
来自Profiler的 Self ms 显示其值小于yield return StartCoroutine(coroutineFunction())
中的值。
总结:
yielding
差异几乎与i++
vs ++i
(帖子和预增量)相似。如果您关心内存管理,那么请使用第二种方法yield return coroutineFunction()
,因为它分配的内存较少。此外,如果您希望能够在父节点停止时停止所有内部或子协同程序,那么也可以使用yield return coroutineFunction()
。