15.Time时间

15.Unity重要组件和API-Time


15.1 知识点

Time相关内容主要用来干啥

时间相关内容主要都在 Time 类里,用于游戏中参与位移、记时、时间暂停等。

时间缩放比例

时间缩放比例主要通过 timeScale 变量控制。

timeScale变量-时间缩放比例
// 时间流逝的标度。可用于慢动作效果。默认等于1
// Time.timeScale = 0; // 时间停止
// Time.timeScale = 1; // 正常速度
// Time.timeScale = 2; // 2倍速

帧间隔时间

普通帧间隔时间在 Update 内使用。

帧间隔时间主要用于计算位移。

  • 帧间隔时间:最近的一帧用了多长时间(秒)
  • 帧间隔时间主要是用来计算位移
  • 路程 = 时间 * 速度
  • 根据需求选择参与计算的间隔时间
  • 如果希望游戏暂停时就不动的,那就使用 deltaTime
  • 如果希望不受暂停影响,使用 unscaledDeltaTime
deltaTime变量 受scale影响的帧间隔时间
// 完成上一帧所用的时间(以秒为单位)(只读)。
// print("帧间隔时间" + Time.deltaTime);
unscaledDeltaTime变量 不受scale影响的帧间隔时间
// 从上一帧到当前帧的独立于 timeScale 的时间间隔(以秒为单位)(只读)。
// print("不受scale影响的帧间隔时间" + Time.unscaledDeltaTime);
timeScale=1的时候unscaledDeltaTime是和deltaTime的值一样的 修改了timeScale deltaTime/unscaledDeltaTime会等于timeScale
// timeScale=1的时候unscaledDeltaTime是和deltaTime的值一样的,修改了timeScale deltaTime/unscaledDeltaTime会等于timeScale
// print($"Time.timeScale:{Time.timeScale}" +
//     $" Time.deltaTime:{Time.deltaTime} " +
//     $" Time.unscaledDeltaTime:{Time.unscaledDeltaTime}" +
//     $" Time.deltaTime/Time.unscaledDeltaTime:{Time.deltaTime / Time.unscaledDeltaTime}" );
// Time.timeScale:1 Time.deltaTime:0.0048229 Time.unscaledDeltaTime:0.0048229 Time.deltaTime / Time.unscaledDeltaTime:1
// Time.timeScale:0 Time.deltaTime:0 Time.unscaledDeltaTime:0.0046655 Time.deltaTime / Time.unscaledDeltaTime:0
// Time.timeScale:2 Time.deltaTime:0.0106202  Time.unscaledDeltaTime:0.0053101 Time.deltaTime / Time.unscaledDeltaTime:2

游戏开始到现在的时间

time变量 受scale影响的单机游戏中计时
// 该帧开始的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。
// print("受scale影响的游戏开始到现在的时间:" + Time.time);
unscaledTime变量 不受scale影响的单机游戏中计时
// 该帧的独立于 timeScale 的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。
// print("不受scale影响的游戏开始到现在的时间:" + Time.unscaledTime);
timeScale=1的时候unscaledTime是和time的值一样的 修改了timeScale time/unscaledTime会等于timeScale

物理帧间隔时间

物理帧间隔时间在 FixedUpdate 内使用。

fixedDeltaTime变量 受scale影响的物理帧间隔时间
// 执行物理和其他固定帧率更新(如 MonoBehaviour 的 FixedUpdate)的时间间隔(以秒为单位)0。
// print(Time.fixedDeltaTime);
fixedUnscaledDeltaTime变量 不受scale影响的物理帧间隔时间
// 从上一个固定帧到当前固定帧的独立于 timeScale 的时间间隔(以秒为单位)(只读)。
// print(Time.fixedUnscaledDeltaTime);
timeScale=1的时候fixedUnscaledDeltaTime是和fixedDeltaTime的值一样的 修改了timeScale fixedDeltaTime/fixedUnscaledDeltaTime会等于timeScale

帧数

frameCount变量 从开始到现在游戏跑了多少帧(次循环)
// 已经过的总帧数(只读)。
// print(Time.frameCount);

总结

Time相关的内容主要包括:

  • 帧间隔时间:用于计算位移相关内容。
  • 时间缩放比例:用来暂停或者倍速等等。
  • 帧数(帧同步)。

15.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson15_时间相关Time : MonoBehaviour
{
    void Update()
    {
        #region Time相关内容主要用来干啥
        //时间相关内容 主要都在Time类里 用于游戏中参与位移、记时、时间暂停等
        #endregion

        #region 知识点一 时间缩放比例

        //timeScale变量
        //时间流逝的标度。可用于慢动作效果。默认等于1
        //Time.timeScale = 0;//时间停止
        Time.timeScale = 1;//正常速度
        //Time.timeScale = 2;//2倍速

        #endregion

        #region 知识点二 帧间隔时间

        //帧间隔时间:最近的一帧 用了多长时间(秒)
        //帧间隔时间 主要是用来计算位移
        //路程 = 时间*速度
        //根据需求 选择参与计算的间隔时间
        //如果希望 游戏暂停时就不动的 那就使用deltaTime
        //如果希望 不受暂停影响 unscaledDeltaTime

        //deltaTime变量 受scale影响的帧间隔时间
        //完成上一帧所用的时间(以秒为单位)(只读)。
        //print("帧间隔时间" + Time.deltaTime);
        //打印的结果每一帧都不一样的 Unity会能跑多快就多快 

        //unscaledDeltaTime变量 不受scale影响的帧间隔时间
        //从上一帧到当前帧的独立于 timeScale 的时间间隔(以秒为单位)(只读)。
        //print("不受scale影响的帧间隔时间" + Time.unscaledDeltaTime);

        //timeScale=1的时候unscaledDeltaTime是和deltaTime的值一样的 修改了timeScale deltaTime/unscaledDeltaTime会等于timeScale
        //print($"Time.timeScale:{Time.timeScale}" +
        //    $" Time.deltaTime:{Time.deltaTime} " +
        //    $" Time.unscaledDeltaTime:{Time.unscaledDeltaTime}" +
        //    $" Time.deltaTime/Time.unscaledDeltaTime:{Time.deltaTime / Time.unscaledDeltaTime}" );
        //Time.timeScale:1 Time.deltaTime:0.0048229 Time.unscaledDeltaTime:0.0048229 Time.deltaTime / Time.unscaledDeltaTime:1
        //Time.timeScale:0 Time.deltaTime:0 Time.unscaledDeltaTime:0.0046655 Time.deltaTime / Time.unscaledDeltaTime:0
        //Time.timeScale:2 Time.deltaTime:0.0106202  Time.unscaledDeltaTime:0.0053101 Time.deltaTime / Time.unscaledDeltaTime:2

        #endregion

        #region 知识点三 游戏开始到现在的时间

        //time变量 受scale影响的单机游戏中计时
        //该帧开始的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。
        //print("受scale影响的游戏开始到现在的时间:" + Time.time);

        //unscaledTime变量 不受scale影响的单机游戏中计时
        //该帧的独立于 timeScale 的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。
        //print("不受scale影响的游戏开始到现在的时间:" + Time.unscaledTime);

        //timeScale=1的时候unscaledTime是和time的值一样的 修改了timeScale time/unscaledTime会等于timeScale

        #endregion

        #region 知识点四 物理帧间隔时间
        #endregion

        #region 知识点五 帧数

        //frameCount变量 从开始到现在游戏跑了多少帧(次循环)
        //已经过的总帧数(只读)。
        //print(Time.frameCount);

        #endregion
    }

    private void FixedUpdate()
    {
        #region 知识点四 物理帧间隔时间

        //FixedUpdate内

        //fixedDeltaTime变量 受scale影响的物理帧间隔时间
        //执行物理和其他固定帧率更新(如 MonoBehaviour 的 FixedUpdate)的时间间隔(以秒为单位)0。
        //print(Time.fixedDeltaTime);
        //打印的结果每一物理帧都一样的 可以在ProjectSetting中的Time里设置 

        //fixedUnscaledDeltaTime变量 不受scale影响的物理帧间隔时间
        //从上一个固定帧到当前固定帧的独立于 timeScale 的时间间隔(以秒为单位)(只读)。
        //print(Time.fixedUnscaledDeltaTime);

        //timeScale=1的时候fixedUnscaledDeltaTime是和fixedDeltaTime的值一样的 修改了timeScale fixedDeltaTime/fixedUnscaledDeltaTime会等于timeScale

        #endregion
    }

    //总结
    //Time相关的内容
    //1.帧间隔时间  就用计算位移相关内容
    //2.时间缩放比例  用来暂停 或者倍速等等
    //3.帧数(帧同步)
}

15.3 练习题

在哪里可以设置物理更新的间隔时间?

可以在Project Setting中的Time里设置

请问Time中的各个时间对于我们来说,可以用来做什么?至少选择两个时间变量来进行说明

Time.timeScale

  • 时间缩放比例
  • 时间的暂停
  • 时间倍速
  • 如果想要恢复正常 设置为1即可

Time.deltaTime

  • 用于计算位移的帧间隔时间
  • 路程=速度*时间

Time.frameCount

  • 帧数 计算从游戏开始到现在跑了几次循环


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏