Unity帧速度原理(模拟Update及FixedUpdate)

Unity帧速度原理


我们在使用Unity时有一个非常重要的参数:帧数
帧数是指每秒可进行渲染和逻辑计算的次数,游戏每运行一帧,都要处理逻辑,物理,动画,渲染等工作,其中最耗时的操作往往是就是渲染,模拟代码如下:

while(!Stop())
{
   doRender();
   doAnimation();
   doLogical();
   ...
}

而每次执行一遍所用的时常就是帧数:

while(!Stop())
{
 	float currentFrame = GetCurrentTime();
	deltaTime = currentFrame - lastFrame;
	lastFrame = currentFrame;
   doRender();
   doAnimation();
   doLogical();
   ...
}

如上例展示,deltaTime就是Unity中非常常见的deltaTime,而帧数就是每秒执行的while循环体内的逻辑的次数。
详细的执行过程如下:
在这里插入图片描述
注意这里往往不建议处理物理问题,因为在Unity中,上述模拟的是update函数,而建议处理物理的函数是fixedUpdate

和Update主帧循环不同,Unity的刚体系统通过固定的时间来驱动,固定的运算时间是保证模拟结果准确一致的重要因素 。在刚体系统运算开始前,Unity会根据上一次刚体运算完成的时间再加上Fixed Timestep的所设置的值来作为这一次刚体运算时间的限定范围。然后刚体系统会开始计算,直到达到这个时间限制临界点。

Unity中,通过Time Manager可以调整Fixed Timestep的值,也可以在脚本中通过访问Time.fixedDeltaTime属性来读取这个值。注意,更低的Fixed Timestep值会让刚体模拟次数更频繁,结果也更精确,但代价是CPU的性能开销也会更大。除非你对物体引擎有更高的要求,否则一般不建议更改默认的设置。

Fixed Timestep保证了刚体模拟的实时准确运算,但也会导致一些问题,当游戏中物理运算量比较多时,会导致游戏帧率变低(因为游戏中的物体数量非常多,运算量会非常大)。而游戏的主循环(Update)必须在在常规的物理运算FixedUpdate()调用之间进行,当有大量的物体运算要进行处理时就会在一个主循环帧(Update)当中进行多次物理运算(FixedUpdate).在主循环帧开始的时候,物体的位置和其它属性都是固定不变的,因此在这一帧里显卡所显示的最终结果与更高频率的物理运算结果是不同步的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值