关于Unity3D中deltaTime的简单分析到引发思考

本文探讨了Unity引擎中deltaTime变量在不同帧率下对物体移动距离的影响,解释了deltaTime如何用于控制游戏物体的动态行为,并通过实例展示了在不同帧率机器上的表现一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

deltatime 是Time类下一个重要的静态变量,他表示的是上一帧所用的时间,在脚本中我们会经常用到它,假设我们此处有一个脚本文件


//此处新建一个含有Transfrom组件的对象

public Transform tmpObj;         


void Update () {
        tmpObj.transform.Translate(Vector3.back*5*Time.deltaTime);
 }


假设我们在场景中新建了一个Cube物体,并绑定到此脚本的tmpObj对象上

那么  tmpObj.transform.Translate(Vector3.back*5*Time.deltaTime);  表示的就是向后移动该Cube物体


Vector3.back的值是0.0,  0.0,  -1.0...即表示Z轴方向指向屏幕外

        5*deltaTime表示的是什么呢?

他表示的是每秒的变化量为5...此处也就是沿Z轴方向每秒后退5个单位...

为什么说它是每秒的变化,那么此处要结合Update()方法一起看


假设我们现在有两台机器稍微好点,一台普通的

前者每秒渲染25帧,即帧频是 25帧/s,那么其deltaTime理论近似为1/25s,为什么说近似,因为有的帧快有的帧慢

                          后者帧频是 20帧/s,那么其deltaTime理论近似为1/20s

那么1秒的时间

        稍好点的机器移动的距离  25 * 1/25 * 5 = 5

        稍普通的机器移动的距离  20 * 1/25 * 5 = 5

发现虽然机器的不同但最后的结果都是移动了相同的距离,避免了不同机器下的到不同的效果

当然这里我们的结论并不严谨,因为我为了大家好理解将deltaTime取了近似值1/25

那么假设

前者第一帧和第二帧渲染的都很快都是1/50s,中间22帧都是1/25s,最后一帧较慢用了2/25s

后者第一帧和第二帧渲染的都很快都是1/40s,中间17帧都是1/20s,最后一帧较慢用了2/20s

乍一看感觉最后逐个乘加的到的结果还有相同的5


但是再看了看deltaTime的定义突然发现问题来了,若帧是如此的话,那么第一帧的deltaTime到底是多少?

                                                                还有最后一帧到底到底有没有执行,理论上肯定会执行,但若执行岂不是多出一帧?

                                                                还是说从第2帧开始执行并把第二帧当第1帧?

                                                                亦或是Unity中是固定帧,每一帧的时间是相同的?

希望有人看到了能有人帮我解答这个问题...




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值