系列文章目录
Unity类库— Time类(24个变量)详细解释
文章目录
- 系列文章目录
- 前言
- 静态变量
- 1.Time.captureDeltaTime
- 2.Time.captureFramerate
- 3.Time.deltaTime
- 4.Time.fixedDeltaTime
- 5.Time.fixedTime
- 6.Time.fixedTimeAsDouble
- 7.Time.fixedUnscaledDeltaTime
- 8.Time.fixedUnscaledTime
- 9.Time.fixedUnscaledTimeAsDouble
- 10.Time.frameCount
- 11.Time.inFixedTimeStep
- 12.Time.maximumDeltaTime
- 13.Time.maximumParticleDeltaTime
- 14.Time.realtimeSinceStartup
- 15.Time.realtimeSinceStartupAsDouble
- 16.Time.smoothDeltaTime
- 17.Time.time
- 18.Time.timeAsDouble
- 19.Time.timeScale
- 20.Time.timeSinceLevelLoad
- 21.Time.timeSinceLevelLoadAsDouble
- 22.Time.unscaledDeltaTime
- 23.Time.unscaledTime
- 24.Time.unscaledTimeAsDouble
前言
Time类:用于测量和控制游戏内的时间流逝,包括获取游戏运行时间、帧间时间差、控制时间流速以及实现游戏的暂停和恢复等。
这是我的学习笔记,记载的是Time类(24个变量)的用法,不能保证完全准确但是初学者可以参考一下。
静态变量
1.Time.captureDeltaTime
用于在捕获帧时设置捕获的时间间隔。这个属性通常用于录制帧或进行特定的帧捕获操作。这个属性的作用就是拿来做录屏功能的(通过设置帧与帧的间隔来截取每帧的图片再通过图片和其他软件来做出视频),没有录屏需求的话不要轻易在运行时设置该属性,因为它会改变Time.deltaTime的值从而影响需要使用Time.deltaTime的操作。
设置Time.captureDeltaTime后,虽然会让Time.deltaTime等于设置后的值,但是FPS的值不是由你设置的值所决定的,FPS的值受硬件与场景决定。
运行游戏后等待1秒然后关闭运行,在Asset中右键刷新,此时Asset中会创建出一个名为Screenshots的文件夹,里面有着0000~0025编号的图片,即一秒捕获25张图片。
解释:
这是folder的值。
2.Time.captureFramerate
用于设置游戏在录制模式下的帧率的属性,通过设置 Time.captureFramerate 来控制录制游戏的帧率,特别是在录制游戏过程中希望固定帧率的情况下非常有用。它就是Time.captureDeltaTime的倒数,表示一秒希望录多少帧。
Time.captureFramerate与Time.captureDeltaTime是倒数关系。
Time.captureDeltaTime=0.04f;与Time.captureFramerate = 25;完全等价。
3.Time.deltaTime
用于获取上一帧与当前帧之间的时间间隔的属性。它的单位是秒。Time.deltaTime 的主要作用是确保基于时间的操作在不同帧率下都能一致进行,例如移动物体、动画播放等。
Time.deltaTime一般是放在Update()方法中的
当把timeScale设为0后Time.deltaTime就会变成0,则在Update()中使用
Time.deltaTime的函数都会停止。
当把timeScale设为2后Time.deltaTime就会变大。
4.Time.fixedDeltaTime
表示物理系统更新的固定时间步长。它的默认值通常是 0.02 秒,也就是每秒 50 次更新。与 Time.deltaTime 不同,Time.fixedDeltaTime 专门用于物理更新,而不是每帧更新。当Time.timeScale=1时Time.fixedDeltaTime的值就是FixedUpdate()函数的调用间隔;当Time.timeScale不等于1时,Time.fixedDeltaTime/Time.timeScale的值就是FixedUpdate()函数的调用间隔。
它是一个固定值。
你可以对它的值进行代码设定,运行时来到Project Settings就会发现它由0.02变为0.01,结束运行它就会回到0.02。你也可以直接在Project Settings中来设置。
默认每隔0.02s调用一次FixedUpdate()方法。
此时每隔1.2s调用一次FixedUpdate()方法。
当你把timeScale设置为0时,FixedUpdate()只会被调用一次就被停止调用了。但是此时fixedDeltaTime的值时会保持不变的还是0.02。
当我把Time.timeScale改为2时,Time.fixedDeltaTime不会变,而Time.fixedTime增速变为2倍,这是因为FixedUpdate()的调用时间间隔为Time. fixedDeltaTime/Time.timeS
cale,它变短了则增速变快。
5.Time.fixedTime
它就是Time.fixedDeltaTime的累加值。它代表了固定时间步长(Time.fixedDeltaTime)的累积时间。
运行游戏,你会发现两个日志的增幅为0.02s即Time.fixedDeltaTime
来更新的。
当fixedDeltaTime被设置为1时,fixedTime就会以1开始递增。
当timeScale为0时,fixedTime便会停止。
当timeScale为2时,fixedTime增速变为2倍。
6.Time.fixedTimeAsDouble
类似于 Time.fixedTime,但返回的是一个双精度浮点数 (double),这可以提供更高的时间精度。
就是单纯提高了精度。
7.Time.fixedUnscaledDeltaTime
它是只读属性,它的值等于Time.fixedDeltaTime除Time.timeScale。
8.Time.fixedUnscaledTime
这个值就是Time.fixedUnscaledDeltaTime的累加值,但是它是从点击开始按钮就开始计时了。
因为timeScale为1,则fixedUnscaledDeltaTime为0.02,因此上面的数都以0.02递增。
因为timeScale为0.5,则fixedUnscaledDeltaTime为0.04,因此上面的数都以0.04递增。
补充:
(1) Time.fixedDeltaTime的值不会受timeScale的值影响。
(2) FixedUpdate()的调用间隔=Time.fixedDeltaTime/Time.timeScale。
(3) fixedTime = Time.fixedDeltaTime 的累加值。
当修改timeScale时并不会影响Time.fixedTime的增加值,只会影响它的增速而已。
9.Time.fixedUnscaledTimeAsDouble
它是Time.fixedUnscaledTime的更精确形式。
10.Time.frameCount
它表示自游戏开始以来已渲染的帧数。
注意: Time.timeScale 不会影响 Time.frameCount 的增长速度,因为它只改变游戏时间的流速,而帧渲染频率是由硬件性能和帧率决定的。即使 Time.timeScale = 0,游戏时间暂停,但帧渲染仍然继续,Update 仍然会被调用,Time.frameCount 也会继续增加。
11.Time.inFixedTimeStep
用于检查当前的代码执行是否处于 FixedUpdate 的执行期间内。
12.Time.maximumDeltaTime
用于限制单个帧的最大时间步长。这在防止游戏在低帧率情况下产生太大的物理步长方面非常有用。
它一般在0.003左右。
在你设置最大帧时间步长后,Time.deltaTime的值不是贴着0.026而是明显低于0.026,但是绝对不会超过0.026。
13.Time.maximumParticleDeltaTime
它用于限制粒子系统在单帧内可以模拟的最大时间步长。这在保持粒子系统仿真的稳定性和性能方面非常有用。
14.Time.realtimeSinceStartup
它返回从点击运行时到当前游戏运行的实际时间(以秒为单位),它不受Time.timeScale值影响。
15.Time.realtimeSinceStartupAsDouble
它返回从点击运行时到当前游戏运行的实际时间(以秒为单位),但是数值更加精确。
16.Time.smoothDeltaTime
它可以返回自游戏开始以来的上一帧所花费的时间(以秒为单位),并且会根据前几帧的平均时间来平滑处理。这个函数通常用于需要平滑处理时间的情况,比如实现平滑的运动、动画等。Time.deltaTime 会返回自上一帧以来的时间间隔,但不会进行平滑处理。如果你想要实现平滑的移动效果,你应该使用 Time.smoothDeltaTime。这俩属性其实在游戏平稳运行时数值几乎是完全一样的你也分不出来使用时的区别,但是当帧率波动很大时Time.smoothDeltaTime就会有明显的平滑效果。
这样会有平滑效果。
17.Time.time
它返回自游戏真正开始以来的总时间(以秒为单位)。你可以使用它来进行时间跟踪、计时、动画控制等操作。
当Time.timeScale变小的话Time.time增速会变慢。
18.Time.timeAsDouble
它就是Time.time的精确形式。
19.Time.timeScale
用于控制游戏时间流逝速度的变量。
20.Time.timeSinceLevelLoad
返回自场景加载以来的时间,以秒为单位。你可以使用Time.timeSinceLevelLoad来获取自场景加载开始以来经过的时间。
当你按下A键会发现它俩的值是一样的,按下空格键重新加载场景后,再按A会发现Time.time还是正常增加,而Time.timeSinceLevelLoad被重置了。
21.Time.timeSinceLevelLoadAsDouble
Time.timeSinceLevelLoad的高精度形式。
22.Time.unscaledDeltaTime
通常用于需要在游戏中进行时间无关的计算或动画更新时。例如,在某些情况下,你可能希望一些游戏逻辑或动画按照真实时间流逝,而不受游戏时间缩放因子的影响。在这种情况下,你可以使用Time.unscaledDeltaTime来进行计算,确保它不受时间缩放的影响。它是只读属性。它的值等于Time.deltaTime/Time.timeScale。
23.Time.unscaledTime
是一个只读属性,它返回自游戏开始以来的真实时间,不受时间缩放因子的影响。
这个值记录从点击运行按钮时开始到当前的时间间隔,无论你怎么该timeScale它都不变。
24.Time.unscaledTimeAsDouble
Time.unscaledTime的高精度形式。