using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; using TMPro; public class Timers : MonoBehaviour { private bool isRun = false; public float limitTime = 0; private TextMeshProUGUI guiTimer; public UnityAction timeOver; public void SetTime(int _time, TextMeshProUGUI timeText, UnityAction timeOverCallback) { limitTime = _time * 60; guiTimer = timeText; guiTimer.text = "倒计时:" + StringHelper.GetCountDownStr((int)limitTime); timeOver = timeOverCallback; RunTimer(); } public string GetCurrentTime() { EndTimer(); return limitTime.ToString("0"); } // 运行计时器 public void RunTimer() { isRun = true; } // 暂停或恢复计时器 public void PauseTimer() { isRun = false; } // 结束计时器 public void EndTimer() { isRun = false; } // Update 方法在每一帧运行,用于更新计时器的状态和显示 private void Update() { if (isRun) Timer(); } /// /// 计时 /// /// private void Timer() { guiTimer.text = StringHelper.GetCountDownStr((int)limitTime); if (limitTime >= 0) { limitTime -= Time.deltaTime; guiTimer.text = "倒计时:" + StringHelper.GetCountDownStr((int)limitTime); } else { //Debug.Log("计时结束"); limitTime = 0; guiTimer.text = "倒计时:" + StringHelper.GetCountDownStr((int)limitTime); timeOver?.Invoke(limitTime.ToString()); isRun = false; } } } public class StringHelper { public const string format = "{0}:{1}:{2}"; public const char zero = '0'; public const int hour2Second = 3600; public const int minute2Second = 60; /// /// 倒计时格式 /// /// 秒数 /// public static string GetCountDownStr(int second) { int hours = second / 3600; int minutes = (second % 3600) / 60; int seconds = second % 60; return string.Format("{0:00}:{1:00}:{2:00}", hours, minutes, seconds); } }