如何在 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。
我正在构建一个大世界(1000 多个游戏对象)。在设备上需要 2s。我在后台执行此操作(世界在完全加载之前是隐藏的)。我发现我可以通过切换到协程并使 yield return null;
.
主要问题是何时开火 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。