Time类
常用API的研究
1. 对Time.time的研究
概念:这是从游戏开始到现在经过的时间(以秒为单位)。
用途:计算游戏中的时间或倒计时。
2. 对Time.deltaTime的研究
概念:这是一个float类型的值,表示上一帧到当前帧所需的时间(以秒为单位)。
应用场景1:在不同的帧速率下,动画都以相同的速度播放
// 应用场景1:保证不同的帧速率下,动画都能以相同的速度播放
public void Update()
{
// 旋转速度 * 每帧消耗时间,可以保证旋转速度不受机器或渲染影响
this.transform.Rotate(0, 1 * Time.deltaTime, 0);
}
3. 对Time.timeScale的研究
这是一个float类型的值,用于调整游戏的速度。
默认值为1,表示正常速度。
如果将其设置为0.5,则游戏会以一半的速度运行;
如果将其设置为2,则游戏会以两倍的速度运行。
注意: 当Time.timeScale为0时
- 不会执行FixedUpdate里面的代码,Update里面的代码是可以执行的
- Time.deltaTime会停止,但Time.unscaledDeltaTime不会停止
- Time.time会停止,但Time.unscaledTime不会停止
- fixedUnscaledTime将停止,但是当timeScale由0变为非0值时,这个值将会有个跳跃,接近于unscaledTime和realtimeSinceStartup
注意2: 实验总结
- timeScale的范围是0到100之间的浮点数,超过此范围时,Unity会给出一条错误信息
- timeScale改变时,会对以下值产生影响:time、deltaTime、fixedTime以及fixedUnscaledDeltaTime
- timeScale改变时,不会对以下值产生影响:realtimeSinceStartup、unscaledTime、unscaledDeltaTime、fixedUnscaledTime、fixedDeltaTime
应用场景1:倒计时
1. 使用Time.time和目标时间差来进行倒计时
using UnityEngine;
using UnityEngine.UI;
public class Timer : MonoBehaviour
{
private bool run; // 是否开始倒计时
private float curTime; // 当前时间
private float startTime; // 开始时间
private bool showTimeLeft = true;// 是否在倒计时
private bool timeEnd = false; // 倒计时是否结束
private float showTime; // 显示时间
private float timeAvaiable = 30.0f; // 倒计时多久
private string curStrTime = string.Empty;
public Text guiTimer; // 显示在屏幕上的时间
// 开启倒计时倒计时
public void RunTimer() // 调用这个函数,就开始倒计时
{
run = true;
startTime = Time.time; // 设置开始时间
}
private void Update()
{
// 如果开启倒计时
if (run) curTime = Time.time - startTime;
// 如果正在倒计时
if (showTimeLeft)
{
showTime = timeAvaiable - curTime;
if(showTime <= 0) // 倒计时结束
{
timeEnd = true;
showTime = 0;
}
}
int min = (int)(showTime / 60); // 分
int second = (int)(showTime % 60); // 秒
int fraction = (int)((showTime * 100) % 100);
curStrTime = string.Format("{0:00}:{1:00}:{2:00}", min, second, fraction);
guiTimer.text = "Timer: " + curStrTime; // 显示在屏幕上
}
}
使用Time.deltaTime进行倒计时
using UnityEngine;
using UnityEngine.UI;
public class TimeBack : MonoBehaviour
{
private Text textTimer; // 显示在屏幕上的时间
public int second = 120; // 倒计时多久(单位:秒)
public void Start()
{
textTimer = this.GetComponent<Text>();
}
private float totalTime;
public void Update()
{
totalTime += Time.deltaTime;
if(totalTime >= 1)
{
second--;
textTimer.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
if(second <= 10)
{
// 如果秒数小于10秒,屏幕上的时间颜色变红
textTimer.color = Color.red;
}
totalTime = 0;
}
}
}
使用InvokeRepeating进行倒计时
using UnityEngine;
using UnityEngine.UI;
public class TimeBack : MonoBehaviour
{
private Text textTimer; // 屏幕显示的时间
public int second = 120; // 倒计时多久
public void Start()
{
textTimer = this.GetComponent<Text>();
// 重复调用(执行的方法名,第一次执行的时间,每次间隔执行的时间)
this.InvokeRepeating("Timer", 1, 1);
}
public void Timer()
{
second--;
textTimer.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
if(second <= 0)
this.CancelInvoke("Timer"); // 清除计时器
}
}
评论区