unity中计时功能的实现⽅法总结
计时功能在游戏中是最常见不过的了,⽐如联盟中技能冷却倒计时,枪战类游戏中⼿枪不能连发,炸弹爆炸的倒计时,我们需要根据不同的需要去编写不同情况下的计时代码。
1.⽤Time类中的属性
法1:Time.time
你是我的女朋友>heel什么意思描述:
该帧开始的时间(只读)。此为⾃游戏启动以来的时间(以秒为单位)。 该值更倾向于提供游戏已经运⾏的时间,⽽不是每帧的时间。
注意:
在所有 Awake 函数都完成之后,Time.time 便会⽴即启动。在 Awake 函数期间,将取消定义 time 值。
eg:每隔⼀秒做某件事。
private float delayTime =1;
private void Update()
{
if(Time.time >= delayTime)
{
//你要做的事......
delayTime += Time.time;
}
}
法2:Time.deltaTimerpt
描述:
完成上⼀帧所⽤的时间(以秒为单位)(只读)。此属性提供当前帧和上⼀帧之间的时间。⽤这个属性计时误差较⼤,但也不会很明显。eg:每隔⼀秒做某件事。上海口译官网
private float timer =0;
private float delayTime =1;
private void Update()
{
timer += Time.deltaTime;
if(timer >= delayTime)
{
//你要做的事......
timer =0;
}
}beneathsoles
2.InvokeRepeating
public void InvokeRepeating (string methodName,float time,float repeatRate);
描述:
在 time 秒后调⽤ methodName ⽅法,然后每 repeatRate 秒调⽤⼀次。
persuade注意:
如果将时间刻度设置为 0,该函数不起作⽤。
eg:每隔⼀秒做某件事。
void Start()
{
InvokeRepeating("事件/⽅法",1.0f,1.0f);
}
void事件/⽅法()
{
//......
}
使⽤CancelInvoke(string methodName);来终⽌事件。
3.使⽤协程:
协程的使⽤可以看。
这⾥通过例⼦来体现,⽤的是协程中的WaitForSecond⽅法:owenscorning
eg:倒计时三秒。
private void Start()
{
StartCoroutine(TimeFunc(3));//开启协程
}
private IEnumerator TimeFunc(float TimeCount)buffet
{
do{
美女餐厅3下载print(TimeCount);
yield return new WaitForSecond(1);//在每帧update之后进⾏等待⼀秒
TimeCount -=1;
ride out}while(TimeCount >0)
print("时间到");
}
4.动画、视频的播放时间有相应的类及属性去获取
5.最后来⼀个项⽬中的应⽤:
枪⼝的⽕花是以动画或者特效形式呈现,但是我们应该只在⽤户射击时才播放/显⽰它,并且每次播放完(⾃⼰设定的时间)我们都需要停⽌播放/显⽰。
public GameObject fireEffect;//开⽕特效
private float hideTimer;//计时器
public float displayTime =0.3f;//枪⼝开⽕特效播放时间
private void Update
{
//如果⽕光启⽤并到了隐藏时间那么禁⽤即可。
if(fireEffect.activeInHierarchy && Time.time >= hideTimer)
{
fireEffect.SetActive(fal);
}
if(Input.GetMouButtonDown(0))//按下⿏标左键射击
{
fireEffect.SetActive(true);
hideTimer = Time.time + displayTime;
}
}