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. Java 协变返回类型

    协变返回类型表示在导出类的被覆盖方法可以返回基类方法的返回类型的某种导出类型 //: polymorphism/covarianreturn.java package object; class Gr ...

  2. MySQL 5.6表空间传输

    在MySQL 5.6 Oracle引入了一个可移动表空间的特征(复制的表空间到另一个服务器)和Percona Server采用部分备份,这意味着你现在可以备份单个数据库或表:由于Percona Ser ...

  3. Nginx安装及常用命令

    一.选定源码目录 cd /usr/local/src 可以是任何目录,本文选定的是/usr/local/src 二.安装依赖库 yum install gcc yum install pcre-dev ...

  4. csu 1982:小M的移动硬盘(双向链表)

    Description 最近小M买了一个移动硬盘来储存自己电脑里不常用的文件.但是他把这些文件一股脑丢进移动硬盘后,觉得这些文件似乎没有被很好地归类,这样以后找起来岂不是会非常麻烦? 小M最终决定要把 ...

  5. Java 构造 BSON 数据类型

    Java 构造 BSON 数据类型 整数/符浮点数 Java BSON 构造整数/符浮点数类型 // {a:123, b:3.14} BSONObject obj = new BasicBSONObj ...

  6. ubuntu下spark安装配置

    一.安装vmware虚拟机 二.在虚拟机上安装ubuntu12.04操作系统 三.安装jdk1.8.0_25 http://www.oracle.com/technetwork/java/javase ...

  7. sqlite读写

    #coding=utf-8 import sqlite3 import os #创建数据库和游标 if os.path.exists(' test.db'): conn=sqlite3.connect ...

  8. CentOS图形界面下如何安装Eclipse和使用maven

    不多说,直接上干货! http://www.eclipse.org/downloads/packages/release/Kepler/SR2 下载到/usr/local/下,解压完成之后,我们想用这 ...

  9. 玩转SpringCloud Spring Cloud 微服务

    Spring Cloud 简介 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均 ...

  10. 在多线程中使用spring的bean

    由于spring在java开发中的广泛运用大大的方便了开发的同时,当运用一些技术比如多线程等 在由spring管理的配置文件中,可以通过封装spring提供工具,手动获得spring管理的bean,这 ...