前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >认真CS☀️增量时间—Time.deltaTime & Time.fixedDeltaTime

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

作者头像
星河造梦坊官方
发布2024-08-14 16:26:11
850
发布2024-08-14 16:26:11
举报
文章被收录于专栏:星河造梦坊专栏
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帧的时间来调整的位移大小来保持速度不变)

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档