gpt4 book ai didi

unity3d - 在fixedUpdate() 中做繁重工作的后果是什么?

转载 作者:行者123 更新时间:2023-12-04 05:18:02 25 4
gpt4 key购买 nike

我知道我是否在 update() 做的事情太多了结果是帧率低于目标帧率。但是如果我在 fixedUpdate() 中做同样的事情会发生什么?

它会导致 Unity 的物理引擎困惑,还是会导致程序崩溃?

最佳答案

答案和评论非常有帮助,但它们缺乏对我的问题的清晰、翔实的答案。每个人都知道当你在 FixedUpdate() 中投入太多工作量时会发生不好的事情。循环,我的问题是问那时会发生什么坏事。

由于我终于掌握了计算机,因此我决定自己进行一些测试。仅供引用,这是我用来测试的:

public class TestFixedUpdate : MonoBehaviour {
public int loopNo = 500000;

private int noOfCall = 0;
private int collisionTimes = 0;

private void FixedUpdate()
{

if (noOfCall > 100) return;
float time = Time.timeSinceLevelLoad;

for (int i = 0; i < loopNo; i++) {
Quaternion.Slerp(Quaternion.identity, Quaternion.FromToRotation(Vector3.up, Vector3.forward), Mathf.Abs(Mathf.Sin(Time.timeSinceLevelLoad)));
}

Debug.Log(Time.timeSinceLevelLoad.ToString("0.00"));

if (noOfCall > 99) Debug.Log("Simulation finished. Times collided:" + collisionTimes);

noOfCall++;
}

private void OnCollisionEnter(Collision collision)
{
if (noOfCall > 100) return;
collisionTimes++;
Debug.Log("Times collided:" + collisionTimes);
}
}

我把它放在一个会在平面上不断反弹的球体上。测试是通过将函数从 FixedUpdate() 更改来进行的。和 Update()并比较差异。

我发现的主要区别在于 FixedUpdate() , Unity 的模拟 Time (游戏世界的时间)与实际时间不同步。换句话说,任何依赖于 Unity 的 Time 的函数系统将表现得好像整个世界都放慢了速度。

还:
  • 即使对于 FixedUpdate(),Unity 报告两种情况的帧速率相同在这种情况下,实际帧速率——现实世界每秒的帧数——显然要低得多。
  • 除了减速之外,碰撞检测和物理模拟逻辑似乎照常工作。应该碰撞的物体仍然碰撞;加速、施力等仍然有效。没有在 20 毫秒(Unity 的毫秒)内跳过碰撞器的刚体仍然像往常一样碰撞和反弹。
  • Maximum Allowed Timestep项目设置中的选项定义了必须绘制帧之前的最大(Unity 模拟时间)数量(我以前不知道它是做什么用的)。说明:如果我将它设置为 0.5 秒,那么无论我在两个函数中放入多少代码,逻辑更新步骤( Update() )都会在 FixedUpdate() 之后立即调用round 模拟了第 0.5 秒,然后将渲染场景。
  • 关于unity3d - 在fixedUpdate() 中做繁重工作的后果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42273726/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com