保存对IEnumerator
的引用时会发生什么情况,消耗什么类型的资源,但不要立即对其调用StartCoroutine()
?即:
IEnumerator myenum;
void Start(){
myenum = MyIenum(obj);
}
IEnumerator MyIenum(Object obj){
//Function does it's coroutine stuff
}
//...A while later, in some different function down the road
StartCoroutine(myenum);
维护弹出的
IEnumerators
队列并定期调用StartCoroutine()
不好吗? 最佳答案
我没有发现任何问题。
它们使Unity的协程工作或多或少地只是您要尝试的工作。
StartCoroutine(MyCoroutine());
// ...
IEnumerator MyCoroutine()
{
yield return new WaitForEndOfFrame();
// ...
yield return new WaitForSeconds(1);
}
确实做到了。首先,调用MyCoroutine(),它返回一个IEnumerator,其当前位置是WaitForEndOfFrame的产生实例。该枚举数传递给StartCoroutine(),这是一种存储IEnumerator的引擎功能,根据当前位置,在正确的时刻到来时调用MoveNext()。在MoveNext()之后,IEnumerator的新当前位置将是WaitForSeconds的产生实例,依此类推。
如果启动多个协程,则每个协程都有其自己的IEnumerator,所有这些都将存储起来,并在它们的时间到来时调用MoveNext()。
因此,您可以轻松地编写自己的协程系统,也可以使用Unity提供的系统。保留IEnumerator实例当然会有一些内存开销,因为yielding函数的堆栈必须存储在某个地方,但除此之外,只要不移动IEnumerator,就不应使用任何资源(如CPU)。
关于c# - Unity3D:使用IEnumerators队列(列表)的效率如何?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35053073/