第一种方式是利用Unity中的协程,代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class DemoTest : MonoBehaviour {public Text text;//测试用的数字public int MyTime = 60;void Start (){//开启协程 StartCoroutine (StartUpdate ());}//一秒钟减去1 IEnumerator StartUpdate (){while (true) {if (MyTime > 0) {MyTime -= 1;text.text = UpdateTime (MyTime);} else {break;}yield return new WaitForSeconds (1f);}}/// <summary>/// 时间换算/// </summary>/// <returns>The time.</returns>/// <param name="inputTime">输入的时间</param>string UpdateTime (int inputTime){string temp;int minute, seconds;minute = (int)(inputTime / 60);Debug.Log ("minute = " + minute);seconds = inputTime % 60;Debug.Log ("seconds = " + seconds); // 这样的话,当minute<0的时候只有一个数字,可能有的需求上不允许,所以就换一种方式// if (seconds >= 10) { // temp = "0" + minute + ":" + seconds; // } else { // temp = minute + ":" + seconds; // }//优化版,利用三目运算符进行取值,这样更好的实现倒计时string minTemp = (minute < 10) ? "0" + minute : minute.ToString ();string secTemp = (seconds < 10) ? "0" + seconds : seconds.ToString ();temp = minTemp + ":" + secTemp;return temp;}}
第二种方式,利用Update,原理是一样的
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class DemoTest : MonoBehaviour {public Text text;//测试用的数字public int MyTime = 60;float timer = 0;float timerInterval = 1f;void Update (){timer += Time.deltaTime;if (timer >= timerInterval) {timer = 0;MyTime -= (int)timerInterval;if (MyTime < 0) {return;}text.text = UpdateTime (MyTime);}}/// <summary>/// 时间换算/// </summary>/// <returns>The time.</returns>/// <param name="inputTime">输入的时间</param>string UpdateTime (int inputTime){string temp;int minute, seconds;minute = (int)(inputTime / 60);Debug.Log ("minute = " + minute);seconds = inputTime % 60;Debug.Log ("seconds = " + seconds);// 这样的话,当minute<0的时候只有一个数字,可能有的需求上不允许,所以就换一种方式// if (seconds >= 10) {// temp = "0" + minute + ":" + seconds;// } else {// temp = minute + ":" + seconds;// }//优化版,利用三目运算符进行取值,这样更好的实现倒计时string minTemp = (minute < 10) ? "0" + minute : minute.ToString ();string secTemp = (seconds < 10) ? "0" + seconds : seconds.ToString ();temp = minTemp + ":" + secTemp;return temp;} }