认真CS☀️增量时间—Time.deltaTime & Time.fixedDeltaTime

2024-08-14 16:26:11 浏览数 (1)

Time.deltaTime:以秒计算,前一帧到后一帧所用的时间

Time.fixedDeltaTime:Unity固定时间,为0.02s,可在Edit—ProjectSettings—Time修改

Update():每帧调用一次,受当前渲染的物体影响,这与当前场景中正在被渲染的物体有关(人物面数、个数),有时快有时慢,帧率会变化,Update()调用的时间间隔就会变化

FixedUpdate():每Time.fixedDeltaTime调用一次,不受帧率影响,是以固定的时间间隔调用

LateUpdate():晚于更新

“如果你加或减一个帧改变的值,你应该与Time.deltaTime相乘,当你乘以Time.deltaTime表示:每秒移动物体10米,而不是每帧10米”

解读:FixedUpdate()中:    transform.Translate(Vector3,right)

我们希望GameObject每隔一段时间(0.02s或你确定的值)沿X正向移动1个单位

Translate接受位移,实际上是transform.Translate(Vector3,right*1),Vector3是速度,“1”是Time.fixedDeltaTime=0.02s

当我们在FixedUpdate()中写此函数时,游戏按时间来刷新(0.02s等),但如果此函数写在Update()中,游戏却会卡顿,因为Update()是按帧时间来执行,但帧频率不确定,造成卡顿

解决办法:在Update()中乘以Time.deltaTime*50,即transform.Translate(Vector3.right*Time.deltaTime*50)

这地方的50是因为和FixedUpdate()保持一致,FixedUpdate()每0.02s执行一次,1s分为了50帧,即50帧每秒,如果Time.deltaTime=0.02s则Time.deltaTime*50为1,如果偏大或偏小,数值也会大于1或小于1,位移的长度也会按比例改变,从而保持匀速变化,但1帧可能执行多于或小于0.02s的变化(因为它一帧的时间不确定,按1帧的时间来调整的位移大小来保持速度不变)

大家还有什么问题,欢迎在下方留言!

0 人点赞