目录
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);
}
}