Time.time 游戏开始后累计时间
Time.timeScale 时间缩放
Time.deltaTime 上一帧渲染时间
Time.unscaledDeltaTime不受影响的上一帧渲染时间
Time.timeScale
不影响渲染 所以 Update 执行间隔不受影响
影响物理更新 所以FidexUpdate执行间隔受间隔
Time.deltaTime 受影响
Time.timeScale = 0; //暂停游戏
Time.timeScale = 1; //正常游戏
Time.timeScale = 0.1f;//慢动作
public float deltaTime, unscaledDeltaTime, time, unscaledTime;
//本帧时间 - 上一帧时间
//上一帧消耗时间
deltaTime = Time.deltaTime;
unscaledDeltaTime = Time.unscaledDeltaTime;
time = Time.time;
unscaledTime = Time.unscaledTime;
//如果Update执行次数少 那么deltaTime数值大
//总结:如果在Update中对物体做物理操作(移动/旋转/力)
//需要在速度上 乘以 每帧消耗时间,用以得到恒定的速度。
//transform.Rotate(0, speed * Time.deltaTime, 0);
//如果希望游戏暂停后,当前物体不受影响
transform.Rotate(0, speed * Time.unscaledDeltaTime, 0);
实现倒计时器和控制时间间隔执行操作
方式一:适用场合------固定重复时间调用
private void Start()
{
txtTimer = GetComponent<Text>();
//重复调用(要执行的方法名称,开始调用时间,调用间隔)
InvokeRepeating("Timer", 1, 1);
//延迟调用
//Invoke("需要调用的方法名称", 调用时间);
}
//Time.deltaTime 实现
//试用场合:。
private float totalTime = 0;
//InvokeRepeating 实现
//试用场合:计时器。每间隔固定时间 执行1次
private void Time1()
{
second--;//119 1:59
txtTimer.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
if (second <= 0)
CancelInvoke("Timer");//取消调用
}
方式二:适用场合----沿多个路点移动,到达目标等待一段时间
private int second =120;
private float totalTime =0;
private void Timer2()
{
//累加每帧消耗时间
totalTime += Time.deltaTime;
//如果1s
if (totalTime>=1)
{
second--;//119 1:59
txtTimer.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
totalTime = 0;//清空累加的时间
}
}
方式三: 适用场合-----发射子弹
private int second =120;
private float nextTime=1;
//Time.time 实现
private void Timer3()
{
//如果时间到了
if (nextTime <= Time.time)
{
second--;//119 1:59
txtTimer.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
nextTime = Time.time + 1;//在当前时间上增加1s
if (second <= 10) txtTimer.color = Color.red;
if (second <= 0) enabled = false;
}
}