[Unity3D]Unity中的Time

要求实现动态生成管道,一直没有想到比较好的方法,之前跟着教程做的时候也用到了Time类,这次又详细查了查,总算解决了问题。


1.Time.time

此帧开始的时间(只读)。这是以秒计算到游戏开始的时间。也就是说,从游戏开始到到现在所用的时间。

当在MonoBehaviour的FixedUpdate里调用的时候,返回的是fixedTime属性。

// Instantiates a projectile off every 0.5 seconds,
// if the Fire1 button (default is ctrl) is pressed.
//如果Fire1按钮被按下(默认为ctrl),每0.5秒实例化一发子弹
using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	public GameObject projectile;
	public float fireRate = 0.5F;
	private float nextFire = 0.0F;
	void Update() {
		if (Input.GetButton("Fire1") && Time.time > nextFire) {
			nextFire = Time.time + fireRate;
			duck clone = Instantiate(projectile, transform.position, transform.rotation);
		}
	}
}

2.Time.deltaTime

以秒计算,完成最后一帧的时间(只读)。使用这个函数使和你的游戏帧速率无关。

放在Update()函数中的代码是以帧来执行的.如果我们需要物体的移动以秒来执行.我们需要将物体移动的值乘以Time.deltaTime。

如果你加或减一个每帧改变的值,你应该与Time.deltaTime相乘。当你乘以Time.deltaTime实际表示:每秒移动物体10米,而不是每帧10米。

当从MonoBehaviour的FixedUpdate里调用时,返回固定帧速率增量时间(fixedDeltaTime)。

请注意从OnGUI里你不应该依赖于Time.deltaTime,因为OnGUI可以在每帧被多次调用并且每个调用deltaTime将持有相同的值,直到下一帧再次更新。(确实不能这么用)

//move the object 10 meters per socond.
using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	void Update() {
		float translation = Time.deltaTime * 10;
		transform.Translate(0, 0, translation);
	}
}


3.Time.fixedTime

最近的FixedUpdate已开始的时间(只读)。这是以秒计自游戏开始的时间。固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。

4.Time.fixedDeltaTime

以秒计间隔,在物理和其他固定帧速率进行更新(像MonoBehaviour的FixedUpdate)。

为读取增量时间建议使用Time.deltaTime,因为如果你是在FixedUpdate函数或Update函数里,它自动返回正确的增量时间。

请注意fixedDeltaTime时间间隔是有关在游戏的时间受timeScale的影响。


其实就是一个数数,开始的时候用for循环写的真是心碎碎的,最后用的Time.time,这段是每隔一秒逐个消失:

void Update () {
<span style="white-space:pre">	</span>if(flag == true)
	{
		while(i < objPipe.Length && Time.time > timer)
		{
			timer = Time.time + appearRate;
			objPipe[i].SetActive (false);
			Debug.Log(i);
			i++;
		}
	}
}



在GUI里果然用Time会混乱,只好设置一个标志位flag。


另:搜到一个现实游戏FPS的方法,make一下:

using UnityEngine;
using System.Collections;

public class showFps : MonoBehaviour {

	private float frames = 0f;
	private float updateInterval = 0.5f;
	private string fps;
	private float accum = 0f;
	private float timeLeft;
	
	void Start () {
		timeLeft = updateInterval;
	}

	void Update () {
		timeLeft -= Time.deltaTime;
		accum += Time.timeScale / Time.deltaTime;
		++frames;
		if(timeLeft <= 0f)
		{
			fps = (accum/frames).ToString("f2");
			timeLeft = updateInterval;
			accum = 0.0f;
			frames = 0;
		}
	}

	void OnGUI()
	{
		GUI.Box(new Rect(20,80,100,20),"FPS:"+fps);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值