计时功能在游戏中是最常见不过的了,比如联盟中技能冷却倒计时,枪战类游戏中手枪不能连发,炸弹爆炸的倒计时,我们需要根据不同的需要去编写不同情况下的计时代码。
描述: 该帧开始的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。 该值更倾向于提供游戏已经运行的时间,而不是每帧的时间。
注意: 在所有 Awake 函数都完成之后,Time.time 便会立即启动。在 Awake 函数期间,将取消定义 time 值。
eg:每隔一秒做某件事。
private float delayTime = 1; private void Update() { if(Time.time >= delayTime) { //你要做的事...... delayTime += Time.time; } }描述: 完成上一帧所用的时间(以秒为单位)(只读)。此属性提供当前帧和上一帧之间的时间。用这个属性计时误差较大,但也不会很明显。
eg:每隔一秒做某件事。
private float timer = 0; private float delayTime = 1; private void Update() { timer += Time.deltaTime; if(timer >= delayTime) { //你要做的事...... timer = 0; } }描述: 在 time 秒后调用 methodName 方法,然后每 repeatRate 秒调用一次。
注意: 如果将时间刻度设置为 0,该函数不起作用。
eg:每隔一秒做某件事。
void Start() { InvokeRepeating("事件/方法", 1.0f, 1.0f); } void 事件/方法() { //...... }使用CancelInvoke(string methodName);来终止事件。
协程的使用可以看官方脚本手册中的这一节。 这里通过例子来体现,用的是协程中的WaitForSecond方法: eg:倒计时三秒。
private void Start() { StartCoroutine(TimeFunc(3));//开启协程 } private IEnumerator TimeFunc(float TimeCount) { do{ print(TimeCount); yield return new WaitForSecond(1);//在每帧update之后进行等待一秒 TimeCount -= 1; }while(TimeCount > 0) print("时间到"); }枪口的火花是以动画或者特效形式呈现,但是我们应该只在用户射击时才播放/显示它,并且每次播放完(自己设定的时间)我们都需要停止播放/显示。
public GameObject fireEffect;//开火特效 private float hideTimer;//计时器 public float displayTime = 0.3f;//枪口开火特效播放时间 private void Update { //如果火光启用并到了隐藏时间那么禁用即可。 if(fireEffect.activeInHierarchy && Time.time >= hideTimer) { fireEffect.SetActive(false); } if(Input.GetMouseButtonDown(0))//按下鼠标左键射击 { fireEffect.SetActive(true); hideTimer = Time.time + displayTime; } }