UnityEngine.Time类包含的属性:

public static int captureFramerate { get; set; }
public static float deltaTime { get; }
public static float fixedDeltaTime { get; set; }
public static float fixedTime { get; }
public static int frameCount { get; }
public static float maximumDeltaTime { get; set; }
public static float realtimeSinceStartup { get; }
public static int renderedFrameCount { get; }
public static float smoothDeltaTime { get; }
public static float time { get; }
public static float timeScale { get; set; }
public static float timeSinceLevelLoad { get; }
public static float unscaledDeltaTime { get; }
public static float unscaledTime { get; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

———————————分割线—————————————– 
1、 UnityEngine.Time.captureFramerate: 
一旦设置了这个值(非0),每一帧会以1.0f/captureFramerate的时间更新(相对于Time.time,每一帧执行的真实时间还是不变的,其实这里再乘以Time.timeScale更合适),说白了就是改变每一帧所用的时间。这个属性并不改变Time.timeScale和Application.targetFrameRate,先上图: 
我先不设置UnityEngine.Time.captureFramerate

void Start ()
{
//Time.captureFramerate = 10;
} void Update ()
{
Debug.Log(string.Format("第{0}帧----Time.timeScale:{1} Time.deltaTime:{2} Time.time:{3} 系统时间:{4}"
, Time.frameCount, Time.timeScale, Time.deltaTime, Time.time, System.DateTime.Now.ToString("HH:mm:ss.ffff")));
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

看输出结果: 
 
结果和我们平时看到的一样

下面我们来设置一下UnityEngine.Time.captureFramerate = 10; 
再看输出结果: 
 
相信大家都看出来其中的差别了,虽然Time.timeScale没有变,但是Time.time确实比系统时间加快了,如果设置了Time.timeScale, 也会影响结果的,这个属性在使用的时候要特别注意了。

2、UnityEngine.Time.deltaTime: 
时间增量,依据Time.time,在Update里调用返回的是完成上一帧的时间,在FixedUpdate里调用返回的是FixedTimeStep的值。

3、UnityEngine.Time.fixedDeltaTime : 
固定增量时间,返回FixedTimeStep。FixedUpdate执行的时间间隔和物理检测的时间间隔。 
注意一下,这个是依据的是Time.time,也就是当Time.time累加的值等于了FixedTimeStep,那么FixedUpdate和物理检测就会执行,可以理解成当时间被加速,和此时间有关的会被更频繁的执行,所以当Time.timeScale为0时,FixedUpdate不会被执行。

4、UnityEngine.Time.fixedTime : 
固定时间,上一次FixedUpdate开始执行的时间,从程序开始计时。

5、UnityEngine.Time.frameCount : 
帧计数器,返回游戏一共经过了多少帧。

6、UnityEngine.Time.maximumDeltaTime : 
一帧所需的最大时间,如果一帧所需的时间可能大于这个值,那么一些物理检测和其他一些固定帧的更新将会减少执行。

7、UnityEngine.Time.realtimeSinceStartup : 
从程序启动到现在的时间,依据系统时间,不受Time.timeScale影响,当程序处于后台时,这个时间依然有效,不会停止计时,不管程序可不可以在后台运行。

8、UnityEngine.Time.renderedFrameCount : 
这个没有找到任何官方文档,比较奇怪。从字面上理解,就是被渲染帧的次数。尝试在Update(还有FixedUpdate和LateUpdate,这两个和Update的值是一样的)里输出一下,会发现这个次数每次都是增加2,而不是增加1,这就很奇怪吧,Update是每一帧都要执行的,这个是肯定的,也就是再每一帧其实是渲染了两次的。想了一下,在一帧中,还有可能被执行的还有OnGUI,结果在里面输出一下发现,多增加的1果然是在这里面。这个应该用的比较少。

9、UnityEngine.Time.smoothDeltaTime : 
一个平滑淡出Time.deltaTime的时间。在Update里和Time.deltaTime输出比较一下就会发下,这个值是当前的Time.deltaTime和上一帧的Time.smoothDeltaTime的一个差值的中间值。

10、UnityEngine.Time.time : 
程序内部的一个时间,返回当前帧开始的时间,受Time.timaScale影响。在FixedUpdate里调用,将返回Time.fixedTime。当程序处于后台时,如果程序不可以在后台运行,这个时间将失效,不会再计时了。

11、UnityEngine.Time.timeScale : 
时间缩放,影响一切基于Time.time的行为。

12、UnityEngine.Time.timeSinceLevelLoad : 
从场景加载完到现在的时间,基于Time.time。

13、UnityEngine.Time.unscaledDeltaTime : 
忽略Time.timeScale的Time.deltaTime。在刚开始的两帧貌似不太准

14、UnityEngine.Time.unscaledTime : 
把每一帧的Time.unscaledDeltaTime 加起来就是这个属性的值,虽然说理解功能上Time.realtimeSinceStartup 有点相似,当时两者并不想等,就是因为Time.unscaledDeltaTime在程序开始不太准确的原因,导致和 realtimeSinceStartup 会有误差,这个要注意一下。

总结: 
两种时间一定要分清,一个是依赖于系统的时间,它的一秒等于现实世界的一秒;另一个是程序自己的时间,这个时间可人为控制(加速,减速),大部分属性都是基于这个时间的。

UnityEngine.Time类属性解析的更多相关文章

  1. 如何利用.Net内置类,解析未知复杂Json对象

    如何利用.Net内置类,解析未知复杂Json对象 如果你乐意,当然可以使用强大的第三方类库Json.Net中的JObject类解析复杂Json字串 . 我不太希望引入第三方类库,所以在.Net内置类J ...

  2. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  3. 【Spring源码深度解析学习系列】复杂标签属性解析(四)

    一.创建用于属性承载的BeanDefinition BeanDefiniton是一个接口,在Spring中存在三种实现:RootBeanDefinition.ChildBeanDefinition.G ...

  4. Android利用反射机制为实体类属性赋值

    在做android项目时,有时会遇到从网络上获取json类型数据,赋值给实体类,实体类属性少可以一个一个的赋值,如果实体类有很多属性,赋值可能就要耗很长的功夫了,幸好Java给我们提供了反射机制.下面 ...

  5. Atitit.注解and属性解析(2)---------语法分析 生成AST attilax总结 java .net

    Atitit.注解and属性解析(2)---------语法分析 生成AST  attilax总结  java .net 1. 应用场景:::因为要使用ui化的注解 1 2. 使用解释器方式来实现生成 ...

  6. 解析HTML文件 - 运用SgmlReader类来解析HTML文件

    运用.NET Framework类来解析HTML文件.读取数据并不是最容易的.虽然你可以用.NET Framework中的许多类(如StreamReader)来逐行解析文件,但XmlReader提供的 ...

  7. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_9 Mybatis中的返回值深入-解决实体类属性和数据库列名不对应的两种方式

    sql语句里面起别名的方式 测试查询的方法 数据字段 都有值了. 配置查询接口列表和实体类属性名对应关系 id可以随便起名 主键的对应 再次测试,并没有封装成功 这是应为定义的对应关系并没有使用. 当 ...

  8. Python 进阶_OOP 面向对象编程_类属性和方法

    目录 目录 类属性 调用类属性 查看类属性 特殊的类属性 类方法 真构造器 __new__ 类属性 在理解类属性之前要先搞清楚 实例属性 和 函数属性 之间的区别: 1. 实例属性:指的是实例化类对象 ...

  9. 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 SpringBoot是如何实现自动配置的?--SpringBoot源码(四) 温故而知新,我们来简单回顾一下上 ...

随机推荐

  1. Zookeeper的java客户端API使用方法(五)

    前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等.这篇博文我们重点来看下Zookeeper的java客户端API使用方式. 创建会话 客户端可 ...

  2. .NetCore中的程序通过Docker在CentOS中部署

    基础说明 安装Docker过程就略过了 创建一个Asp.Net Core程序 启用Docker支持,会生成Dockerfile文件,接下来看下这个文件,当然不同的版本生成的具体可能不一致 FROM m ...

  3. AngularJS初始化静态模板

    AngularJS可以通过ng-app来自动初始化模块,也可以通过angular.bootstrap(document, [module])手动启动应用,不管用哪种方法,应用启动后,动态往dom树里面 ...

  4. JavaWeb快速入门

    孙卫琴老师的javaweb一书已经买了很多年,由于很厚一直也没有去好好阅读下, 项目发布后有闲暇时间,决定快速学习了,毕竟很多概念和知识主要还是复习. 对于互联网,我们可以简单认为浏览器就是会人类语言 ...

  5. Linux下多节点SSH无密码互联实现

    需求:有3个主机192.168.0.191.192.168.0.192.192.168.0.193,需要实现无密码ssh互联访问 我使用的是root用户进行操作的: 1.每个节点分别检查是否安装ope ...

  6. 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 既然前后端 ...

  7. java go

    熟练掌握java技术,对多线程.数据结构有清晰的认识: 熟悉MySQL/Oracle数据库,熟悉关系数据库应用设计开发: 熟悉Spring/MyBatis/Freemarker等一种或者多种框架: j ...

  8. 怎样c# java md5值保持一致

    c#方式 /// <summary> /// 获得字符串md5. /// </summary> /// <param name="myString"& ...

  9. c#浏览器 遇到的一些问题

    禁用弹窗是需要引用一个新的dll,引用方式http://www.itjsxx.com/csharp/IHTMLDocument2_namespace.html, 禁用新的弹窗的方式http://blo ...

  10. 【bfs】BZOJ1102- [POI2007]山峰和山谷Grz

    最后刷个水,睡觉去.Bless All! [题目大意] 给定一个地图,为FGD想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的.若两个格子有公共顶点,那么他们就是 ...