//TimeScript.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimeScript : MonoBehaviour
{
// Start is called before the first frame update
/*
void Start()
{
}
// Update is called once per frame
void Update()
{
}
*/
public float timecache1;
public float timecache2;
public float speed = 10;
public float timecache3;
public float timecache4;
public float timecache5;
public float timecache6;
//Time类小练习,制作一个倒计时,两分钟计时,最后十秒字体变成红色,0秒停止倒计时。
//根据每渲染一帧更新一次此方法内的代码
private void Update()
{
//Update()方法不受Time.timeScale属性影响
//deltaTime:以秒为单位,表示每帧的经过时间。
//通俗点将:Time.deltaTime属性放到Updata生命周期中代表,每一帧的间隔时间
timecache2 = Time.deltaTime;
//每渲染帧执行1次,旋转y轴1°,z轴1°
//如运行设备性能好,渲染帧多,1秒旋转的角度就大,匀速的话实际上是想1秒旋转的角度小一点
//如运行设备性能差,渲染帧少,1秒旋转的角度就小,匀速的话实际上是想1秒旋转的角度大一点
//this.transform.Rotate(0, speed * timecache2, speed * timecache2);
//重点:旋转速度 * 每帧消耗的时间,可以保证旋转速度不受设备性能,以及渲染影响。
//1帧渲染多,Time.deltaTime的值就越小,反之同理。
//Update()方法不受Time.timeScale属性影响,但是Time.deltaTime是Time类型,会受影响,所以乘了这个数值,这条语句就会受到Time.timeScale属性影响
//如果改变Time.timeScale的属性为0,speed * timecache2,代表乘0还是等于0,等于没有旋转
//所以不要以为是Update()方法受到了Time.timeScale属性影响!
//真实常用案例!!
//如果想在游戏暂停时,某个游戏物体还能匀速运行呢(需要乘每一帧间隔时间)
//首先排除法,代码不能放在FixedUpdate()方法中,因为整个方法受Time.timeScale影响。
//可以使用Time.unscaledDeltaTime属性,不受时间缩放的每一帧间隔时间
this.transform.Rotate(0, speed * Time.unscaledDeltaTime, speed * Time.unscaledDeltaTime);
timecache3 = Time.timeScale;
timecache4 = Time.unscaledDeltaTime;
//从游戏开始到到现在所用的时间,该属性只能读取
//受时间缩放影响的游戏运行时间
timecache1 = Time.time;
//不受时间缩放影响的游戏运行时间
timecache5 = Time.unscaledTime;
//不受时间缩放影响的游戏运行时间,Unity 5版本以前没有Time.unscaledTime,只有Time.realtimeSinceStartup
timecache6 = Time.realtimeSinceStartup;
}
//固定每0.02执行一次此方法
private void FixedUpdate()
{
//FixedUpdate()方法受Time.timeScale属性影响
//timecache1 = Time.time;
//timecache2 = Time.deltaTime;
//固定每0.02执行一次此方法,与渲染无关,可以不用像Updata一样乘上每一帧的间隔时间,直接写上参数即可
//this.transform.Rotate(0, speed, speed);
}
/*
private void OnGUI()
{
if (GUILayout.Button("游戏内暂停"))
{
//Time.timeScale属性:时间缩放的参数设置。这可以用于减慢运动效果,默认正常为1倍数,0为暂停游戏,参数类型是浮点数
//Time.timeScale属性只会影响FixedUpdate()方法
Time.timeScale = 0;
}
if (GUILayout.Button("恢复游戏"))
{
Time.timeScale = 1;
}
if (GUILayout.Button("慢动作-减缓时间"))
{
Time.timeScale = 0.1F;
}
}
*/
}
|