102 lines
2.3 KiB
C#
102 lines
2.3 KiB
C#
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<string> timeOver;
|
|
|
|
public void SetTime(int _time, TextMeshProUGUI timeText, UnityAction<string> 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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 计时
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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;
|
|
|
|
/// <summary>
|
|
/// 倒计时格式
|
|
/// </summary>
|
|
/// <param name="second">秒数</param>
|
|
/// <returns></returns>
|
|
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);
|
|
}
|
|
}
|