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

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 updatevoid Start(){//游戏开始到现在所花的时间Debug.Log("游戏开始到现在所花的时间:"+Time.time);//"时间缩放值"Debug.Log("时间缩放值:"+Time.timeScale);//游戏固定时间间隔Debug.Log("游戏固定时间间隔"+Time.fixedDeltaTime);}// Update is called once per framevoid 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 updatevoid Start(){//游戏开始到现在所花的时间Debug.Log("游戏开始到现在所花的时间:"+Time.time);//"时间缩放值"Debug.Log("时间缩放值:"+Time.timeScale);//游戏固定时间间隔Debug.Log("游戏固定时间间隔"+Time.fixedDeltaTime);}// Update is called once per framevoid 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.lryc.cn/news/526994.html

相关文章:

  • 【C++】特殊类设计、单例模式与类型转换
  • scratch七彩六边形 2024年12月scratch三级真题 中国电子学会 图形化编程 scratch三级真题和答案解析
  • 代码随想录刷题day16|(哈希表篇)349.两个数组的交集
  • Synology 群辉NAS安装(6)安装mssql
  • 2025年美赛B题-结合Logistic阻滞增长模型和SIR传染病模型研究旅游可持续性-成品论文
  • Hook 函数
  • 蓝桥杯模拟算法:蛇形方阵
  • DeepSeek-R1解读:纯强化学习,模型推理能力提升的新范式?
  • 深度解析:基于Vue 3的教育管理系统架构设计与优化实践
  • 【PyTorch】3.张量类型转换
  • Spring Boot整合JavaMail实现邮件发送
  • 字节跳动发布UI-TARS,超越GPT-4o和Claude,能接管电脑完成复杂任务
  • 数据的秘密:如何用大数据分析挖掘商业价值
  • OAuth1和OAuth2授权协议
  • AI学习(vscode+deepseek+cline)
  • 04-机器学习-网页数据抓取
  • 计网week1+2
  • 重定向与缓冲区
  • 练习题 - Django 4.x File 文件上传使用示例和配置方法
  • [VSCode] vscode下载安装及安装中文插件详解(附下载链接)
  • JVM常见知识点
  • 深入探索 Vue 3 Markdown 编辑器:高级功能与实现
  • vscode无法格式化go代码的问题
  • 《Java程序设计》课程考核试卷
  • one-hot (独热编码)
  • 寒假1.23
  • unity 粒子系统设置触发
  • 【C++】类和对象(五)
  • 超分辨率体积重建实现术前前列腺MRI和大病理切片组织病理学图像的3D配准
  • 第13章 深入volatile关键字(Java高并发编程详解:多线程与系统设计)