隐藏页面特效

关于Time.deltaTime的理解

在初学Unity3d时就不时会用上Time.deltaTime这个变量,初学Unity时不是很懂这个这个变量,那时的理解仅限于“要让数值按每秒多少进行变化时把数值乘以它就对了”

 

这么理解它其实也不算错

 

下面来简单理解这个变量,我们先看看Unity官方手册中对这个变量的描述(网址:https://docs.unity3d.com/ScriptReference/Time-deltaTime.html)

官方手册中说明:这个变量是按秒为单位,完成上一帧所用的时间。(只读。)

首先,这就意味着Time.deltaTime是一个变量,而不是一个常量,我想许多游戏玩家都会明白,一个游戏的FPS(游戏运行时每秒所运行的帧数)总是在变化的,FPS会因为电脑配置、场景变化或者游戏画面质量的设置而改变,总之,在玩游戏的时候,FPS是在不断变化的,可能配置高电脑FPS很稳定,但也会有变化时候

 

而Unity中,在每个新创建的C#脚本中都会有一个Update()方法,这个方法是每一帧都会运行一次的,如果我们在Update()方法简单设置一个物体的位移“transform.translate(new vector3(1,0,0))”,那么就意味着这个物体每一帧向X轴正方向移动1个单位的距离,这样一来,当游戏运行时,假设FPS稳定在60帧,那么就意味着这个物体每秒向X轴正方向移动60个单位,而当游戏环境发生变化,FPS降到30帧时,游戏物体就只能每秒向X轴正方向移动30个单位了

 

显然,一般情况下,我们是不希望数值这样变化的

 

因此,使用Time.deltaTime这个变量就显得十分重要,这个变量是指完成上一帧所用的时间,那么假设当游戏的FPS稳定为50帧时,Time.deltaTime的值则为0.02秒,而当FPS降低或者上升时,即使改变的很剧烈,也会有个过渡时间,假设FPS从50帧在一秒的时间里降到了25帧,那么Time.deltaTime这个变量也会跟着变化的剧烈程度从0.02秒升到0.04秒

 

假设,一个游戏开始时FPS只有5帧(方便计算),游戏的某个脚本的Update()方法有一个物体位移函数transform.translate(new vector3(1*Time.deltaTime,0,0)),之后FPS逐渐降到了1帧,那么降低的过程中,Time.deltaTime的变化将是这样的:

完成第一帧用了0.2秒,因此之后Time.deltaTime=0.2秒,

完成第二帧时,FPS已经降到了4帧,因此用了0.25秒,于是之后Time.deltaTime=0.25秒,

完成第三帧时,FPS已经降到了3帧,因此用了0.33秒,于是之后Time.deltaTime=0.33秒,

完成第四帧时,FPS已经降到了2帧,因此用了0.5秒,于是之后Time.deltaTime=0.5秒,

完成第五帧时,FPS已经降到了1帧,因此用了1.0秒,于是之后Time.deltaTime=1.0秒。

于是,完成第一帧时,物体向X轴正方向移动了1*0.2=0.2个单位,用时0.2秒,

完成第二帧时,物体向X轴正方向移动了1*0.2=0.2个单位,用时0.25秒,

完成第三帧时,物体向X轴正方向移动了1*0.25=0.25个单位,用时0.33秒,

完成第四帧时,物体向X轴正方向移动了1*0.33=0.33个单位,用时0.5秒,

完成第五帧时,物体向X轴正方向移动了1*0.5=0.5个单位,用时1.0秒.

上面的假设中,物体在2.28秒的时间里移动了1.48个单位,尽管与1单位/秒的速度有很大距离,但这里用的帧数是5帧降到1帧,当帧数为60帧甚至更高,改变幅度变小,物体的位移速度是可以约等于1单位/秒的。

以上假设只是为了方便理解,实际情况会更加复杂。

 

 

所以,当你在Update()方法中将transform.translate(new vector3(1,0,0))更改成transform.translate(new vector3(1*Time.deltaTime,0,0))后,这个物体的位移就基本能按每秒一个单位的速度向X轴正方向进行位移

 

当然,Unity中还有FixedUpdate()方法,不过这里只讲到Update()方法;

 

以上为我对Time.deltaTime的简单理解,如有不正确的地方,还望指教
--------------------- 
作者:Black_Window 
来源:CSDN 
原文:https://blog.csdn.net/Black_Window/article/details/80031114 


__EOF__

本文作者Moon
本文链接https://www.cnblogs.com/jiangxiaoming/p/12983807.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   江小明Moon  阅读(2045)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示