在初学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的简单理解,如有不正确的地方,还望指教

Unity3d-通过简单示例来理解Time.deltaTime相关推荐

  1. 理解 Delphi 的类(十) - 深入方法[27] - 递归函数: 简单示例

    为什么80%的码农都做不了架构师?>>>    //所谓递归函数, 就是自己调用自己的函数, 先来个简单的例子:{递归调用的简单示例} procedure alert(i: Inte ...

  2. 用Unity3D实现简单的牧师与魔鬼游戏

    用Unity3D实现简单的牧师与魔鬼游戏 项目地址 牧师与魔鬼游戏 完成效果图 实现心得 游戏所使用的是MVC模式开发. 遵循的动作表为: 动作 条件 开船 船上至少有一个角色(牧师或魔鬼) 牧师在左 ...

  3. VS2010对C++11的语法支持简单示例

    简单的来说,就是大部分不支持,小部分支持,具体的参考官网链接: https://docs.microsoft.com/en-us/previous-versions/visualstudio/visu ...

  4. 蛙蛙推荐:在c#使用IOCP(完成端口)的简单示例

    蛙蛙推荐:在c#使用IOCP(完成端口)的简单示例 上次给大家发了利用winsock原生的api来做一个同步的socket服务器的例子,大致上只是贴了一些代码,相信大家这么冰雪聪明,已经研究的差不多了 ...

  5. Scrapy学习过程之二:架构及简单示例

    1.Scrapy架构 参考:https://docs.scrapy.org/en/latest/topics/architecture.html#data-flow 以下是架构图: 从上图可以看出,S ...

  6. UE4 Matinee功能基本概念及简单示例(Sequence编辑器)

    UE4 Matinee功能基本概念及简单示例(Sequence编辑器) https://gameinstitute.qq.com/community/detail/122091 UE4提供的Matin ...

  7. 通用 Mapper UUID 简单示例

    通用 Mapper UUID 简单示例 不可回写的 UUID 通用 Mapper 中对 UUID 的用法主要提到了一种专有的写法,如下写法: @GeneratedValue(generator = & ...

  8. python计算器总结_Python 计算器的简单示例

    这篇文章主要为大家详细介绍了Python 计算器的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 简介 在这篇 ...

  9. python汉语分词,python汉语分词的简单示例

    对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 目前我常常使用的分词有结巴分词.NLPIR分词等等 最近是在使用结巴分词,稍微做一下推荐,还是蛮好 ...

最新文章

  1. 2020未来科学大奖获奖名单揭晓
  2. netbeans缺少java文件夹_Java,如何在netbeans中添加库文件?
  3. nginx 返回动态Html,Nginx负载均衡 -Nginx动态更新upstream
  4. datatable.select()的一个问题
  5. nyist 17 -----记忆式搜索------Accept
  6. C# PDF 转成图片利用GhostScript
  7. 【报告分享】第七次全国人口普查主要数据情况报告.pdf(附下载链接)
  8. python连接sql server
  9. 在centos上运行neural_artistic_style 风格转换
  10. Java Script 练习题
  11. c++比c快?一道字符串题目
  12. nyoj810 贪心的嘿嘿(想弄死这出题的)
  13. windows7系统适合哪个python_windows7如何下载python系统
  14. SQL Server数据库分页查询
  15. 在线制作ico矢量图标
  16. C case和UVM TB的交互,tube_print, event_sync
  17. 多变量微分方程组带事件控制的ODE45函数写法
  18. 超好的包体积优化教程,不仅仅是优化
  19. 嵌入式Linux学习笔记之Linux内核裁剪
  20. vmbackup和vmrestore是何方神圣?

热门文章

  1. 2020年工具钳工(高级)新版试题及工具钳工(高级)模拟考试题库
  2. 计算机留学美国ps,美国留学ps
  3. 一文了解类加载机制--ClassLoader
  4. jsp页面弹出另一个页面窗口
  5. 多标签学习之讲座版 (内部讨论, 未完待续)
  6. JavaEE复习资料
  7. Android7.0特性及适配
  8. 如何用即构sdk开发实现小程序直播
  9. 四川子苗教育:抖音短视频违规怎么办?
  10. 增量调制原理matlab仿真,毕业设计论文-基于Matlab的△M增量调制系统仿真与性能分析.doc...