当前位置: 首页 > article >正文

unity学习20:time相关基础 Time.time 和 Time.deltaTime

目录

1 unity里的几种基本时间

1.1  time 相关测试脚本

1.2 游戏开始到现在所用的时间 Time.time

1.3 时间缩放值 Time.timeScale

1.4 固定时间间隔 Time.fixedDeltaTime

1.5 两次响应时间之间的间隔:Time.deltaTime

1.6 对应测试代码

1.7 需要关注的2个基本方法  Update() , FixedUpdate() 

2 做1个定时器/计时器 

2.1 一般定时器的原理

2.2 另一种定时器实现

2.3 代码

2.4 测试情况


1 unity里的几种基本时间

1.1  time 相关测试脚本

  • 创建1个对象
  • 创建一个脚本  timeTest
  • 挂载到一个gameobject上去

1.2 游戏开始到现在所用的时间 Time.time

  • Time.time
  • 游戏开始到现在所用的时间
  • 代码里跑了实测是0

1.3 时间缩放值 Time.timeScale

  • Time.timeScale
  • 时间缩放值:时间倍速,加速,减速等
  • 应该是可以调整游戏的时间速度的倍数,部分时间的速度,实现黑客帝国那种子弹时间效果?
  • 默认是1
  • 理论上也可以是小于1,甚至0吧,也可以加快是大于1

1.4 固定时间间隔 Time.fixedDeltaTime

  • Time.fixedDeltaTime
  • 无论机器好不好,理论上都是0.02秒,也就是同一段代码,再不同的机器上跑的输出效果都一样,这个还挺重要的。
  • 实测也是如此
  • 这个是在gamesetting上的设置的,默认是0.02秒,可以修改
  • 在void Start() 里设置的,只会执行一次,执行的内容就是读取这个gamesetting的这个配置

1.5 两次响应时间之间的间隔:Time.deltaTime

  • Time.deltaTime
  • 比如可以再2帧之间,取时间间隔
  • 也可以其他2个行为之间,取时间间隔
  • 可以看出下面测试代码的差别

  • void Update() {}

  • 每帧执行一次

  • Time.deltaTime 取到的就是每帧之间的间隔时间

  • 实际可以看前面是0.02秒,后面就越来越块,到了0.005秒左右有波动

  • 也就是后面能到100-200帧/秒

  • private void FixedUpdate() {}

  • 每个固定时间间隔执行一次(没修改默认就是0.02秒)

  • Time.deltaTime 取到的就是0.02秒,很稳

1.6 对应测试代码

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

public class timeTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
    //游戏开始到现在所花的时间
    Debug.Log("游戏开始到现在所花的时间:"+Time.time);
    //"时间缩放值"
    Debug.Log("时间缩放值:"+Time.timeScale);
    //游戏固定时间间隔
    Debug.Log("游戏固定时间间隔"+Time.fixedDeltaTime);

    }


    // Update is called once per frame
    void Update()
    {
    //上一帧到现在用的时间
    Debug.Log("上一帧到现在用的时间"+Time.deltaTime);
    }


    private void FixedUpdate()
    {
    //测试固定间隔时间   
    Debug.Log("测试固定间隔时间"+Time.deltaTime);
    }



}

1.7 需要关注的2个基本方法  Update() , FixedUpdate() 

  •             void Update()                      // Update is called once per frame 每帧触发1次
  • private void FixedUpdate()             //固定间隔时间,触发1次 

    // Update is called once per frame

    void Update()

    {

    //上一帧到现在用的时间

    Debug.Log("上一帧到现在用的时间"+Time.deltaTime);

    }


 

    private void FixedUpdate()

    {

    //测试固定间隔时间  

    Debug.Log("测试固定间隔时间"+Time.deltaTime);

    }

2 做1个定时器/计时器 

  • 一般用time, 比如 timer2,timer1 这样的表示时间点
  • Time.time () 返回的就是时间点
  • 一般用timer,比如timer1,timer2 表示时间段,定时器
  • Time.deltaTime 返回的就是时间段

2.1 一般定时器的原理

  • // 先界定,要测试的程序开始时的时间
  • timer1=Time.time ()
  • //再取得结束时的时间
  • timer2=Time.time ()
  • // 时间差就是要计算的2者差值
  • timer=timer2-timer1

2.2 另一种定时器实现

  • //先初始化定时器,也就是界定,定时器的开始时间为0,零点
  • timer=0
  • //定时器循环计时,累计时间
  • timer=timer + Time.deltaTime

2.3 代码

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

public class timeTest : MonoBehaviour
{
    float time1=Time.time;
    float timer1=0;
    float timer2=0;


    // Start is called before the first frame update
    void Start()
    {
    //游戏开始到现在所花的时间
    Debug.Log("游戏开始到现在所花的时间:"+Time.time);
    //"时间缩放值"
    Debug.Log("时间缩放值:"+Time.timeScale);
    //游戏固定时间间隔
    Debug.Log("游戏固定时间间隔"+Time.fixedDeltaTime);

    }


    // Update is called once per frame
    void Update()
    {
    //上一帧到现在用的时间
    Debug.Log("上一帧到现在用的时间"+Time.deltaTime);
    timer1=timer1+Time.deltaTime;   //不能再这样定义一次了 float timer1=timer1+Time.deltaTime; 否则就是2个变量了,上面的全局,这里是局部
    float time2=Time.time;
    timer2=time2-time1;
    Debug.Log("第1个计时器"+timer1);
    Debug.Log("第2个计时器"+timer2);
    }


    private void FixedUpdate()
    {
    //测试固定间隔时间   
    Debug.Log("测试固定间隔时间"+Time.deltaTime);
    }



}

2.4 测试情况


http://www.kler.cn/a/522248.html

相关文章:

  • 展示统计信息收集情况
  • Hive:Hive Shell技巧
  • RocketMQ 中如何实现消息的可靠传递?
  • 升级到Mac15.1后pod install报错
  • C++ unordered_map和unordered_set的使用,哈希表的实现
  • 如何获取小程序的code在uniapp开发中
  • 基于Django的微博舆情分析系统的设计与实现
  • 【算法与数据结构】动态规划
  • RTOS面试合集
  • 【Python实现机器遗忘算法】复现2020年顶会CVPR算法Selective Forgetting
  • 006 mybatis关联查询(一对一、一对多)
  • OPencv3.4.1安装及配置教程
  • 20.Word:小谢-病毒知识的科普文章❗【38】
  • freeswitch在centos上编译过程
  • 白平衡与色温:摄影中的色彩密码
  • 2025_1_27 C语言内存,递归,汉诺塔问题
  • 二叉树(补充)
  • 51单片机开发:IO扩展(串转并)实验
  • 基于单片机的家用无线火灾报警系统的设计
  • PETSc源码分析: Time Integrators
  • 将 OneLake 数据索引到 Elasticsearch - 第 1 部分
  • C语言中的static关键字在函数和变量声明中的不同作用是什么?
  • AI学习指南Ollama篇-Ollama模型的量化与优化
  • MMDetection 详细安装过程
  • Elasticsearch的索引生命周期管理
  • RocketMQ实战—1.订单系统面临的技术挑战