Unity Coroutine:花费太多时间获得收益

时间:2019-12-20 14:11:01

标签: c# unity3d time coroutine

我有一个Unity应用,该应用需要处理大量数据而不冻结UI。

显而易见的解决方案:协程!

直觉的是要做

while (thingsLeftToDo()) {
    doThings()
    yield return null;
}

这将调用doThings()一次,然后等待下一帧。

我想做的是在屈服之前在一帧时间内尽我所能。如果我的帧率为30fps,则在我需要放弃控制之前,我可能有三十次({或其他任何时间)致电doThings()。但是我该怎么做呢?

我在想类似的东西

while (thingsLeftToDo()) {
    doThings()
    if (timeSpent > 1/fps) yield return null;
}

但是,当我查看how Unity does time时,似乎对任何一个的调用都将返回相同的值,而不管它们在帧中被调用了多少次,即时钟仅在帧之间更新。那我该怎么办呢?

我是否需要超越Unity API来使用系统时钟并自己负责?

startTime = SomeSystemClockFunction()
while (thingsLeftToDo()) {
    doThings()

    if (SomeSystemClockFunction() - startTime > 1/fps) {
        yield return null;
        startTime = SomeSystemClockFunction()
    }
}

感觉有点脏。想法?

0 个答案:

没有答案