Unity基础(二)--Time类

Time类:获取时间信息的接口。

所包含的一些变量:
Unity基础(二)--Time类_第1张图片
常用属性:
1.deltaTime:每帧消耗的时间。

  1. 保证移动速度不受机器性能、渲染的影响
  2. 类似的属性:
    1、unscaledDeltaTime:无关timeScale,以秒计算,要完成最后一帧的时间(只读)。
    2、maximumDeltaTime:一帧能获得的最大时间。物理和其他固定帧速率更新。类似FixedUpdate
    3、smoothDeltaTime:经平滑的Time.deltaTime时间(只读)。
    4、fixedDeltaTime:以秒计间隔,在物理和其他固定帧速率进行更新。类似FixedUpdate
  3. 要想游戏物体暂停,只有一部分游戏物体继续运动:在Update中进行,个别物体的时间*Time.unscaledDeltaTime

2.time:从游戏开始到现在所用时间

  1. unscaledTime:无关timeScale,以秒计算,从游戏开始的时间(只读)。
  2. realtimeSinceStartup:以秒计,自游戏开始的真实时间(只读)。与time类似

3.timeScale:时间缩放

  1. 当timeScale为0时,FixedUpdate暂停;Update无影响
  2. 在Update中时间*deltaTime

利用Time类制作倒计时
Unity基础(二)--Time类_第2张图片

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TimeDome: MonoBehaviour {
     
    private  Text text;
    public int second;
    int flag=0;
    int sum=0;
	// Use this for initialization
	void Start () {
     
        text = GetComponent<Text>();
	}
	
	// Update is called once per frame
	void FixedUpdate () {
     
        flag++;
        //每1秒进行一次
        if(flag%50==0)
        {
                
            second--;
            if(second>=0)
            {
     
                //固定格式输出
                text.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
            }

            if (second / 60 == 1 && second % 60 == 0)
            {
     
                //一分钟后变红
                text.color = Color.red;
            }
           
        }       
	}
    void Update()
    {
     
        //按下空格暂停
        if(Input.GetKeyDown(KeyCode.Space))
        {
     
            sum++;
        }
        if(sum%2==0)
        {
     
            Time.timeScale = 1;
        }
        else
        {
     
            Time.timeScale = 0;
        }
        
    }
}


固定每秒的方法总结:

方法一:Time.time
适合间隔可以改变,子弹连续发射的频率
private float nextTime=1if(Time.time>=nextTime)
{
     
	nextTime=Time.time+1;
}




方法二:Time.deltaTime
适合间隔可以改变,技能放出后的读秒
private float totalTime;
//累加每帧间隔
totalTime+=Time.deltaTime;
if(totalTime>=1)
{
     
totalTime=0;
}




方法三:Invoke
适合做简单的每隔固定时间的重复执行
//在Start中调用InvokeRepeating;
void Start()
{
     
//重复调用(调用的方法名,第一次执行时间,每次执行间隔)
InvokeRepeating("Timer",1,1);
}
private void Timer()
{
     
//一段时间后,不想调用了
//取消调用
CancelInvoke("Timer");
}

预制体(预制件)

一种资源类型,可以在场景进行实例
优点:对预制件的修改可以同步到所有实例,提高开发效率
如果单独修改实例的属性值,则该值不再随预制件变化

Unity基础(二)--Time类_第3张图片

  • Select键:通过预制件实例选择对应预制件
  • Revert键:放弃实例属性值,还原预制件属性值
  • Apply键:将某一实例的修改应用到所有实例

你可能感兴趣的:(Unity,3D,#,Unity基础学习,游戏,unity)