如何在 Unity 中获取自帧开始以来的时间以用于加载目的

How to get time since frame start in Unity for loading purposes

我正在构建一个大世界(1000 多个游戏对象)。在设备上需要 2s。我在后台执行此操作(世界在完全加载之前是隐藏的)。我发现我可以通过切换到协程并使 yield return null;.

来保持活动场景的 FPS

主要问题是何时开火 yield return null;。如果我经常这样做,那么它会减慢加载速度。如果我很少这样做,它会降低低端设备上的 FPS。

我的想法很简单,就是检测自帧开始后经过了多少毫秒,并在我花费了例如 12 毫秒后触发 yield return null;(留出一些时间来渲染其他所有内容并保持接近60 帧/秒)。

但是,我找不到一种有效的方法来获取自帧开始以来的时间? Unity 应该有一些东西,因为资产的异步加载似乎消耗了恰到好处的时间来保持稳定的 FPS。

您可以使用 Time.time 并将其分配给某个变量(例如 lastFrameTime),并在下一帧中检查是否 Time.time - lastFrameTime > amountOfTimeToRefresh...

或者 Time.delta 将时间分配给 lastFrameTime,如果...

如果该条件为真,则执行任何操作并将 lastFrameTime 重置为 0

希望对您有所帮助...

DMGregory has given the great and right answer on GameDev StackExchange