您的位置:首页 > 移动开发 > Unity3D

Unity 3d 实现倒计时

2017-12-19 01:19 351 查看
在做吃金币的游戏的时候,感觉只有金币数的增加太单调了,于是增加了倒计时的功能。



查实现方法的时候,看了很多种方法但还是不懂具体怎么实现,最后在贴吧找到了方法成功实现。

首先是常规操作,创建Text,然后放到合适的位置。

然后新建一个空GameObject,添加脚本CountDown.cs。

脚本代码如下:

public GameObject text;
public int TotalTime = 60;

void Start ()
{

StartCoroutine(CountDown());

}

IEnumerator CountDown()
{
while (TotalTime >=0)
{
text.GetComponent<Text>().text = TotalTime.ToString();
yield return new WaitForSeconds(1);
TotalTime--;

}
}


然后将Text拉到空GameObject的GameObject属性上,就建立了连接,再打开游戏,就能看见倒计时了。

代码里用到了协程,写博客就是为了强化学习这一知识点。

协程其实就是一个IEnumerator(迭代器),IEnumerator 接口有两个方法 Current 和 MoveNext() ,只有当MoveNext()返回 true时才可以访问 Current,否则会报错。迭代器方法运行到 yield return 语句时,会返回一个expression表达式并保留当前在代码中的位置。 当下次调用迭代器函数时执行从该位置重新启动。

Unity在每帧做的工作就是:调用 协程(迭代器)MoveNext() 方法,如果返回 true ,就从当前位置继续往下执行。

协程不是线程,也不是异步执行的,是Unity每帧LateUpdate()之后都会去处理的函数。

代码中的StartCoroutine 即为开始执行协程。yield return new WaitForSeconds(1f);的意思为等待1秒 , 一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后。这起到控制时间的作用。在总时间为0前,在GUI的Text上更新时间对象后,延时一秒,然后时间减一秒,重复更新。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity 游戏