Unity类库--- Time类(24个变量)详细解释

系列文章目录

Unity类库— Time类(24个变量)详细解释



前言

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的高精度形式。

请添加图片描述
请添加图片描述

### Unity中的`Time`使用详解 #### `Time`概述 在Unity引擎中,`UnityEngine.Time` 提供了一组用于时间管理和查询的静态方法和属性,这些特性对于游戏内的位移、计时以及特殊效果(如慢动作或暂停)至关重要[^1]。 #### 关键属性解释 - **`deltaTime`**: 表示上一次帧渲染所花费的时间长度,单位为秒。此值可用于计算物体移动速度或其他基于时间的变化量。 - **`smoothDeltaTime`**: 经过平滑处理后的`deltaTime`,旨在减少因帧率波动引起的速度抖动现象,使得运动更加流畅自然[^2]。 - **`timeScale`**: 控制全局时间流逝速率的比例因子,默认情况下等于1表示正常播放;当设为0则会冻结整个场景内所有依赖于时间更新的对象行为,常用来实现暂停机制;大于1可以使事物加速运行。 ```csharp // 设置时间为两倍速前进 Time.timeScale = 2; ``` #### 实现定时回调的方法 为了更灵活地控制特定事件的发生时刻,可以创建自定义的时间管理系统。一种常见做法是在单例模式下的`TimeManager`组件里维护一个字典来保存待触发的任务及其对应的延迟时间,并通过每帧调用`Update()`函数不断检查是否到达预定条件而执行相应逻辑[^3]。 另一种更为简便的方式是利用官方提供的协程(Coroutine),它允许开发者编写异步代码而不必担心线程同步等问题: ```csharp IEnumerator Countdown(float seconds){ yield return new WaitForSeconds(seconds); // 执行某些操作... } StartCoroutine(Countdown(5)); ``` 此外,还有专门设计好的插件库可以帮助简化此需求,比如上述提到的例子展示了如何借助第三方工具快速安排周期性的任务调度[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值