找回密码
 立即注册
查看: 551|回复: 0

Unity time相关

[复制链接]
发表于 2021-12-7 16:15 | 显示全部楼层 |阅读模式
一、Unity中常用Time类详解

1.只读


    Time.time:表示从游戏开发到现在的时间,会随着游戏的暂停而停止计算。

    Time.deltaTime:表示从上一帧到当前帧的时间,以秒为单位。

    Time.unscaledDeltaTime:不考虑timescale时候与deltaTime相同,若timescale被设置,则无效。

    Time.timeSinceLevelLoad:表示从当前Scene开始到目前为止的时间,也会随着暂停操作而停止。

    Time.unscaledTime:该帧的独立于 timeScale 的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。与 time 不同,该值不受 timeScale 的影响。

    Time.fixedDeltaTime:表示以秒计间隔,在物理和其他固定帧率进行更新,在Edit->ProjectSettings->Time的Fixed Timestep可以自行设置。

    Time.realtimeSinceStartup: 表示自游戏开始后的总时间,即使暂停也会不断的增加。

    Time.frameCount:总帧数
2.可读可写

    Time.fixedTime:表示以秒计游戏开始的时间,固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。Time.SmoothDeltaTime:表示一个平稳的deltaTime,根据前 N帧的时间加权平均的值。Time.timeScale:时间缩放,默认值为1,若设置<1,表示时间减慢,若设置>1,表示时间加快,可以用来加速和减速游戏,非常有用。Time.captureFramerate:表示设置每秒的帧率,然后不考虑真实时间。
3.用realtimeSinceStartup测试方法性能

float time_1 = Time.realtimeSinceStartup;for (int i =0; i < runCount; i++){   Method_1();}float time_2 = Time.realtimeSinceStartup;Debug.Log("总时间:"+(time_2 - time_1));4.用deltaTime控制对象移动、动画等

void Update(){   Cube.transform.Translate(Vector3.forward * Time.deltaTime * Speed);}
附 Unity中物体移动方法详解
5.用timeScale对游戏进行加速、减速或暂停等操作

public void Pause(){  isPause = !isPause;  if (isPause)  {     Time.timeScale = 0;  }  else  {     Time.timeScale = 1;  }}
timeScale官方文档 https://docs.unity.cn/cn/2019.4/ScriptReference/Time-timeScale.html

时间流逝的标度。可用于慢动作效果。

当 timeScale 为 1.0 时,时间流逝的速度与实时一样快。 当 timeScale 为 0.5 时,时间流逝的速度比实时慢 2x。

当 timeScale 设置为 0 时,如果您的所有函数都是独立于帧率的, 则游戏基本上处于暂停状态。

timeScale 影响 Time 类的所有时间和增量时间测量变量(但 realtimeSinceStartup 和 fixedDeltaTime 除外)。

如果您减小了 /timeScale/,建议也将 Time.fixedDeltaTime 减小相同的量。

当 timeScale 设置为 0 时,不会调用 FixedUpdate 函数。
using UnityEngine;public class Example : MonoBehaviour{    // Toggles the time scale between 1 and 0.7    // whenever the user hits the Fire1 button.    private float fixedDeltaTime;    void Awake()    {        // Make a copy of the fixedDeltaTime, it defaults to 0.02f, but it can be changed in the editor        this.fixedDeltaTime = Time.fixedDeltaTime;    }    void Update()    {        if (Input.GetButtonDown("Fire1"))        {            if (Time.timeScale == 1.0f)                Time.timeScale = 0.7f;            else                Time.timeScale = 1.0f;            // Adjust fixed delta time according to timescale            // The fixed delta time will now be 0.02 frames per real-time second            Time.fixedDeltaTime = this.fixedDeltaTime * Time.timeScale;        }    }}二、Unity3D研究院之Time.timeScale、游戏暂停(七十四)

    timeScale不会影响Update和LateUpdate的执行速度。因为FixedUpdate是根据时间来的,所以timeScale只会影响FixedUpdate的速度。

Time.timeScale还会影响Time.time的时间,比如Time.timeScale = 2的话,那么Time.time的增长速度也会变成2倍速度。如果你想取到游戏的实际时间,那么使用Time.timeSinceLevelLoad就可以,前提是必须在Awake()方法以后再取,如果在Awake()方法里面取Time.realtimeSinceStartup会取出一个错误的值,在Start方法里面取的话就正常了。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-23 01:26 , Processed in 0.063133 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表