0

我是一名高级软件工程师,但对 Unity 编程完全陌生。几周以来,我一直在通过为自己编写一些 SteamVR 玩具来自学 Unity。我想询问 Unity 的标准内置方法来提高具有大量密集物理计算的程序的帧速率。

在我当前的 VR 场景中,我有一个球,Rigidbody上面有一个。当我把它捡起来扔的时候,我让它自然地移动,但我在每次Update()调用时都会用很小的力来调整着陆位置,并且总是击中目标。

我看到我的帧率大幅下降,所以我编写了自己的函数来限制更新,将它们限制为每秒 5 次。问题是,我应该使用一些标准的 Unity 行为而不是自己滚动这段代码吗?

在我的投掷脚本中,我维护了一堆顶级变量并首先更新它们以决定是否应该对当前帧进行计算。

private void updateCalculationFrame() {
    isCalculationFrame = Time.time > nextCalculationTime;
    while (nextCalculationTime < Time.time) {
        nextCalculationTime += (1 / calculationsPerSecond);
    }
}

在每一帧上,我运行这个函数,然后如果isCalculationFrame是真的,我继续计算和添加力向量。我只是想知道我是否忽略了一些更标准的方法来用更少的代码做到这一点?我觉得这一定是一件很常见的事情。

4

1 回答 1

0

您那里的代码将冻结 Unity,直到循环完成。你根本不应该这样做。

您可以简单地设置一个新的Time.fixedDeltaTime. 默认情况下,它通常是 about,0.02但您可以将其设置为您想要的任何内容。

执行物理和其他固定帧速率更新(如 MonoBehaviour 的FixedUpdate)的间隔(以秒为单位)。

...

请注意,fixedDeltaTime间隔是相对于受 timeScale 影响的游戏内时间。

于 2021-02-01T08:19:06.637 回答