Unity中Time类详解

1.对Time类的介绍

首先介绍两个概念:现实时间和游戏时间。大多数Time类都是依赖于游戏时间的。
现实时间也就是不依赖于程序内部,就算程序暂停也会继续计算的真实时间,而游戏时间是基于程序内部的,可以自行调整。

1.Time.time:

从游戏开始后所运行的时间,会受时间缩放比例的影响。

 

2.Time.realtimeSinceStartup:

从游戏开始后所运行的真实时间,不会受时间缩放比例的影响。
 

3.Time.timeScale:

时间的缩放,Time.timeScale为1是默认值,为0可用于游戏的暂停,为2可用于游戏的快进。
可在Edit->Project Setting->Time的Time Scale中设置时间缩放。

1.Time.timeScale不会影响Update和LateUpdate,因为Time.timeScale不会影响和帧率有关的事情,Update和LateUpdate是受到帧率影响而不是受到时间影响。
2.Time.timeScale会影响FixedUpdate,因为FixedUpdate是受到时间影响的。
3.Time.timeScale是对于整个游戏的而不是单个场景。

4.Time.timeScale的值是一个[0,100]的数。


4.Time.timeSinceLevelLoad:

当前场景加载完开始计算,表示加载完场景到目前为止运行的时间,会受时间缩放比例的影响。

 

5.Time.unscaledTime:

从游戏开始后开始计时,表示游戏到目前为止运行的时间,不会受时间缩放比例的影响。结果与Time.realtimeSinceStartup一样。

 

6.Time.deltaTime:

表示从上一帧到当前帧时间,也就是时间增量,以秒为单位。Time.deltaTime 就是 1 除以帧率的结果,它的单位为 秒 / 帧。
它是受到时间缩放影响的,当Time.timeScale为0时,Time.deltaTime也为0。

测试:
Unity中Time类详解
在FixedUpdate中Time.deltaTime就是Time.fixedDeltaTime,而Update和LateUpdate时间增量是不固定的由帧率(FPS)决定。

 

7.Time.fixedDeltaTime:

fixedDeltatime是一个固定的时间增量。以秒为单位,在Edit->ProjectSettings->Time中Fixed Timestep设置的值就是Time.fixedDeltaTime。
 

测试:
Unity中Time类详解
不论在哪个Update中,值都是不变的,只受到Fixed Timestep设置的值的影响。

 

8.Time.frameCount:

总帧数

 

2.适用场景

1.Time.realtimeSinceStartup:用于测试方法的性能

Unity中Time类详解Unity中Time类详解Unity中Time类详解

 

2.Time.deltaTime:Update中移动

如果在Update中这样写:表示每帧移动1米。
Unity中Time类详解
运行后发现物体移动卡顿,因为Update每帧调用一次,然而每帧的间隔是不固定的导致第一帧运行X米,第二帧运行Y米,所以移动的不平滑会出现卡顿现象。

所以要解决卡顿现象并且让物体每秒钟移动1米,需要这样写:
Unity中Time类详解
运行后发现游戏物体每秒移动1米,并且不会卡顿。

因为transform.Translate的参数接收的其实是一个位移,位移=速度*时间。
假如两台电脑A和B,电脑A的帧率为50,则Time.deltaTime就是1/50,电脑B的帧率为80,则Time.deltaTime就是1/80。无论电脑的帧率如何都是每秒运行多少帧*Time.deltaTime,对于A电脑每帧的位移=1*50*1/50=1,B也是如此,这样就都是每秒运行1米了。

Unity中不同的移动方式详解:Unity物体移动详解