• UnityEngine.Time类属性解析


    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 会有误差,这个要注意一下。

    总结: 
    两种时间一定要分清,一个是依赖于系统的时间,它的一秒等于现实世界的一秒;另一个是程序自己的时间,这个时间可人为控制(加速,减速),大部分属性都是基于这个时间的。

  • 相关阅读:
    系统兼容性与软件兼容性
    SqlServer 笔记三 规则
    Sql Server 2008 与 Visual Studio 2008 安装说明
    Ms Sql Server
    Git系列教程三 配置与基本命令
    Git系列教程一 入门与简介
    Git系列教程二 基础介绍
    浏览器IE与非IE区分
    SqlServer 笔记二 获取汉字的拼音首字母
    时间戳与日期字符串的转换
  • 原文地址:https://www.cnblogs.com/lancidie/p/8036986.html
Copyright © 2020-2023  润新知