【发布时间】:2018-08-26 12:39:48
【问题描述】:
我有一个耗时的功能,比如...
Debug.Log("A");
void Froze_Function() {
for(int i=0; i<50000; ++i)
// take some time...
Debug.Log("B");
}
Debug.Log("C");
我不希望“Froze_Function”延迟我的统一程序,所以我希望它在其他线程中运行。
Unity有协程,但是不知道怎么用协程正确实现这个功能。
请不要说优化我的功能...
【问题讨论】:
-
答案真的取决于你在做什么,这很耗时。您已经发布了耗时的代码部分。
-
您应该通过某些条件将 Froze_Function 拆分为多个部分(迭代?),然后 yield return new WaitForEndOfFrame()。每次迭代后,您的函数将停止并等待下一帧执行下一步。非常粗鲁的例子,但这就是它的工作原理。顺便说一句,它不是线程,不能用作线程。只能在帧之间(或其他条件)将作业分解成碎片。
-
@AndrewSnejovski 哇.. 太糟糕了。那么我的答案会将 50000 次循环分成 500 或 1000 次......这导致需要 100 或 50 帧来计算?
-
您可以在一帧中进行 100 次迭代,并记住在该帧上花费的时间。在下一次迭代中,您可以增加每帧的操作数,直到帧速率超过某个限制,例如 60fps。
-
@AndrewSnejovski 这可能是一个答案!虽然 w 必须记住花费在 100 次迭代上的时间......或任何迭代才能知道每帧的操作计数