当前位置:   article > 正文

unity中计时功能的实现方法总结_unity 计时功能

unity 计时功能

计时功能在游戏中是最常见不过的了,比如联盟中技能冷却倒计时,枪战类游戏中手枪不能连发,炸弹爆炸的倒计时,我们需要根据不同的需要去编写不同情况下的计时代码。

1.用Time类中的属性

法1:Time.time

描述:
该帧开始的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。 该值更倾向于提供游戏已经运行的时间,而不是每帧的时间。

注意:
在所有 Awake 函数都完成之后,Time.time 便会立即启动。在 Awake 函数期间,将取消定义 time 值。

eg:每隔一秒做某件事。

private float delayTime = 1;
private void Update()
{
	if(Time.time >= delayTime)
	{
		//你要做的事......
		delayTime += Time.time;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

法2:Time.deltaTime

描述:
完成上一帧所用的时间(以秒为单位)(只读)。此属性提供当前帧和上一帧之间的时间。用这个属性计时误差较大,但也不会很明显。

eg:每隔一秒做某件事。

private float timer = 0;
private float delayTime = 1;
private void Update()
{
	timer += Time.deltaTime;
	if(timer >= delayTime)
	{
		//你要做的事......
		timer = 0;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.InvokeRepeating

public void InvokeRepeating (string methodName, float time, float repeatRate);
  • 1

描述:
在 time 秒后调用 methodName 方法,然后每 repeatRate 秒调用一次。

注意:
如果将时间刻度设置为 0,该函数不起作用。

eg:每隔一秒做某件事。

 	void Start()
    {
        InvokeRepeating("事件/方法", 1.0f, 1.0f);
    }

    void 事件/方法()
    {
        //......
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

使用CancelInvoke(string methodName);来终止事件。

3.使用协程:

协程的使用可以看官方脚本手册中的这一节
这里通过例子来体现,用的是协程中的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("时间到");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

4.动画、视频的播放时间有相应的类及属性去获取

5.最后来一个项目中的应用:

枪口的火花是以动画或者特效形式呈现,但是我们应该只在用户射击时才播放/显示它,并且每次播放完(自己设定的时间)我们都需要停止播放/显示。

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;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号