Unity增量时间Time.deltaTime详解

  • Post author:
  • Post category:其他



如博文无法正常显示,请访问原文地址:

https://blog.csdn.net/ChinarCSDN/article/details/82914420




Unity增量时间详解




本文提供全流程,中文翻译。


Chinar

坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)




Chinar

—— 心分享、心创新!

助力新手理解什么是

deltaTime

增量时间

为新手节省宝贵的时间,避免采坑!



Chinar

教程效果:

简介:

Update执行了1次,

transform.Translate(0, 0, 1/60 * 10)

执行一次,物体移动了1/6米

Update1秒内执行了60次,就是

transform.Translate(0, 0, Time.deltaTime * 10)

乘以60次


相当于 =(每帧时间1/60 * 速度 * 60)=10米


Update1秒内执行了N次,就是

transform.Translate(0, 0, Time.deltaTime * 10)

乘以N次


相当于 =(每帧时间1/N * 速度 * N)=10米







全文高清图片,点击即可放大观看

(很多人竟然不知道)






1




deltaTime

—— 增量时间



deltaTime

官方的解释我就不说了


官方的解释多数新手都是看不懂的,不然也不会四处搜博文来学习了


?想要理解增量时间,我们拿物体的移动这种经典案例来说明


要让一个物体,每秒移动10米,代码如下


New举例子黑白88

    /// <summary>
    /// 每帧刷新
    /// </summary>
    void Update()
    {
        transform.Translate(0, 0, Time.deltaTime * 10); //物体沿着自身Z轴方向,每秒移动物体10米运动
    }




2




Why?

—— 为什么乘以增量时间


那么问题来了,多数新手都懵逼在这里:

为什么要乘以增量时间?


我们假设游戏运行时,1秒是60帧。—— 那就是说60个画面,刷!刷!刷!执行完,耗时1秒。



如果电脑,或者手机帧数没有到60帧,时而30帧,时而50帧


那么就会出现,有时候1秒移动了500米 有时候300米,总之每秒都不一样



所以牛逼的前辈们就想到了解决办法,从而引入了增量时间的概念



增量时间是实时变动的,而且每一帧都在变动


1秒30帧,那增量时间就是 1/30 秒



1秒60帧,那增量时间就是 1/60 秒



1秒166帧,那增量时间就是 1/166 秒


这样的设计理念,就保证了无论帧率是多是少,我们让物体1秒移动10米,最后1秒移动的就一定是10米




公式:路程=速度*时间



New举例子黑白88


10米=1秒 * 10米/秒


10米=(1/60 * 60) *10米/秒

10米=(1/166 * 166) *10米/秒

10米=(增量时间 * 1秒总帧数) *10米/秒




重点:


Update函数是每帧执行一次,那么经历过一帧耗费的时间就是 增量时间/deltaTime


1秒内Update执行的次数,就是1秒内执行的总帧数


所以我们只需要写上

transform.Translate(0, 0, Time.deltaTime * 10)

这一个函数


New举例子黑白88


Update执行了1次,

transform.Translate(0, 0, 1/60 * 10)

执行一次,物体移动了1/6米


Update1秒内执行了60次,就是

transform.Translate(0, 0, Time.deltaTime * 10)

乘以60次




相当于 =(每帧时间1/60 * 速度 * 60)=10米


Update1秒内执行了N次,就是

transform.Translate(0, 0, Time.deltaTime * 10)

乘以N次




相当于 =(每帧时间1/N * 速度 * N)=10米





3




Wrong

—— 误区


而大家都知道

Update

函数的调用,是很快的。在我们假定的情况下,这1秒就会被调用60次


而此时我们的代码

transform.Translate(0, 0, 10)

被执行60次


每执行一次,物体就会移动10米。60*10=600米,这完全违背了我们让物体每秒移动10米的初衷



公式:路程=速度*时间



New举例子黑白88


Update执行了1次,

transform.Translate(0, 0, 10)

执行一次,物体就已经移动了10米


Update1秒内执行了60次,就是

transform.Translate(0, 0,10)

乘以60次




相当于 =(10 * 60)=600米


Update1秒内执行了N次,就是

transform.Translate(0, 0, 10)

乘以N次




相当于 =(10 * N)=10N米





支持




May Be

—— 搞开发,总有一天要做的事!


拥有自己的服务器,无需再找攻略!


Chinar

提供一站式教程,闭眼式创建!

为新手节省宝贵时间,避免采坑!





先点击领取 —— 阿里全产品优惠券

(享受最低优惠)



1 ——



云服务器超全购买流程

(新手必备!)



2 ——



阿里ECS云服务器自定义配置 – 购买教程

(新手必备!)



3——



Windows 服务器配置、运行、建站一条龙 !




4 ——



Linux 服务器配置、运行、建站一条龙 !








技术交流群:806091680 !

Chinar

欢迎你的加入




END



本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email:

ichinar@icloud.com

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址



版权声明:本文为ChinarCSDN原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。