Unity3d-通过简单示例来理解Time.deltaTime
转载文章:
Unity3d-通过简单示例来理解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的简单理解,如有不正确的地方,还望指教
Unity3d-通过简单示例来理解Time.deltaTime的更多相关文章
- Redis 安装与简单示例
Redis 安装与简单示例 一.Redis的安装 Redis下载地址如下:https://github.com/dmajkic/redis/downloads 解压后根据自己机器的实际情况选择32位或 ...
- pureMVC简单示例及其原理讲解五(Facade)
本节将讲述Facade,Proxy.Mediator.Command的统一管家.自定义Facade必须继承Facade,在本示例中自定义Facade名称为ApplicationFacade,这个名称也 ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
- Optaplanner规划引擎的工作原理及简单示例(2)
开篇 在前面一篇关于规划引擎Optapalnner的文章里(Optaplanner规划引擎的工作原理及简单示例(1)),老农介绍了应用Optaplanner过程中需要掌握的一些基本概念,这些概念有且于 ...
- Python Thrift 简单示例
本文基于Thrift-0.10,使用Python实现服务器端,使用Java实现客户端,演示了Thrift RPC调用示例.Java客户端提供两个字符串参数,Python服务器端计算这两个字符串的相似度 ...
- SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序
SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 异常汇总:http://www ...
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
- Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例
前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...
随机推荐
- python基础学习7----编码与解码
一.python2 python2中默认以ASCII编码 str='hello world' gbk_to_unicode=str.decode('gbk')#将gbk解码为unicode print ...
- 李嘉诚 《Are you ready》
当你们梦想着为伟大成功的时候,你有没有刻苦的准备? 当你们有野心作领袖的时候,你有没有服务于人的谦恭? 我们常常都想有所获得,但我们有没有付出的情操? 我们都希望别人听到自己的话,我们有没有耐性聆听别 ...
- .net core 入坑经验 - 2、MVC Core之获取网站运行路径
这次是建立了asp.net mvc core项目,在controller中想获取网站在硬盘中的路径,找了一圈Server.MapPath() 已不存在,HttpContent也一样,经过查阅资料发现是 ...
- 题解 P1550 【[USACO08OCT]打井Watering Hole】
题面(翻译有点问题,最后一句话) 农民John 决定将水引入到他的n(1<=n<=300)个牧场.他准备通过挖若 干井,并在各块田中修筑水道来连通各块田地以供水.在第i 号田中挖一口井需要 ...
- ntp时间服务器--Linux配置
时间服务器作用: 大数据产生与处理系统是各种计算设备集群的,计算设备将统一.同步的标准时间用于记录各种事件发生时序, 如E-MAIL信息.文件创建和访问时间.数据库处理时间等. 大数据系统内不同 ...
- Python接口自动化--post提交的四种数据类型 4
常见的post请求提交的数据类型有四种: 1.第一种:application/json:这是最常见的json格式,如下 {"input1":"XXX",&quo ...
- ATP学姐的模拟赛
ATPの水题大赛 声明:不是我觉得这题水,这就是本场模拟赛的名称. T1:求所有的$n$位数中有几个数满足:每一位要么是$A$要么是$B$,并且这个$n$位数的每一位加起来是$A$或$B$的倍数. $ ...
- docker devicemapper 问题
DOCKER_OPTS= "--storage-driver=devicemapper --storage-opt dm.basesize=50G --storage-opt dm.da ...
- Kubernetes1.91(K8s)安装部署过程(六)--node节点部署
hi,everybody,我回来了,之前安装到flannel之后,文章一直没有更新,甚至不少小伙伴都来加qq询问是否继续更新了, 这里说明下原因,我在部署1.91node的时候的确出现了各种各样的问题 ...
- WorldWind源码剖析系列:大气层散射球类AtmosphericScatteringSphere
大气层散射球类AtmosphericScatteringSphere代表地球外面的大气层散射球模型,可以控制开启/关闭渲染该对象.该类的类图如下. 该类所包含的主要字段.属性和方法如下: public ...