1 using System; 2 using UnityEngine; 3 4 public enum ETimerType 5 { 6 CommonFormat, // 78 77 76 75 ... 7 TimeFormat, //以时间格式显示倒计时 8 } 9 10 //自定义时间 11 public class CustomTime 12 { 13 public int Days, Hours, Minutes, Seconds; 14 15 public CustomTime(int seconds) 16 { 17 Days = seconds / 86400; 18 19 seconds = seconds - Days * 86400; 20 Hours = seconds / 3600; 21 22 seconds = seconds - Hours * 3600; 23 Minutes = seconds / 60; 24 25 Seconds = seconds % 60; 26 } 27 28 public string GetTimeFormat() 29 { 30 string formatTime = ""; 31 if (Days > 0) 32 { 33 formatTime = string.Format("{0}天{1}:{2}:{3}", Days.ToString(), Hours.ToString("D2"), Minutes.ToString("D2"), Seconds.ToString("D2")); 34 } 35 else if (Hours > 0) 36 { 37 formatTime = string.Format("{0}:{1}:{2}", Hours.ToString("D2"), Minutes.ToString("D2"), Seconds.ToString("D2")); 38 } 39 else if (Minutes > 0) 40 { 41 formatTime = string.Format("{0}:{1}", Minutes.ToString("D2"), Seconds.ToString("D2")); 42 } 43 else if (Seconds > 0) 44 { 45 formatTime = string.Format("{0}", Seconds.ToString("D2")); 46 } 47 return formatTime; 48 } 49 } 50 51 [RequireComponent(typeof(UILabel))] 52 public class LabelTimer : MonoBehaviour 53 { 54 public delegate void OnFinish(); 55 public event OnFinish EvFinish; 56 57 public int totalTime = 0; 58 public float interval = 0; 59 60 ETimerType timerType = ETimerType.CommonFormat; 61 UILabel mLabel = null; 62 63 void Start() 64 { 65 mLabel = GetComponent<UILabel>(); 66 } 67 68 void Update() 69 { 70 interval += Time.deltaTime; 71 if (interval >= 1) 72 { 73 --totalTime; 74 ShowTime(); 75 interval = 0; 76 } 77 78 if (totalTime <= 0) 79 { 80 enabled = false; 81 gameObject.SetActive(false); 82 if (null != EvFinish) 83 EvFinish(); 84 } 85 } 86 87 void ShowTime() 88 { 89 if (timerType == ETimerType.CommonFormat) 90 { 91 mLabel.text = totalTime.ToString(); 92 } 93 else if (timerType == ETimerType.TimeFormat) 94 { 95 CustomTime ct = new CustomTime(totalTime); 96 mLabel.text = ct.GetTimeFormat(); 97 } 98 } 99 100 public void Stop() 101 { 102 gameObject.SetActive(false); 103 totalTime = 0; 104 EvFinish = null; 105 } 106 107 public bool TimeKeeping 108 { 109 get 110 { 111 return totalTime > 0; 112 } 113 } 114 115 public void StartCountDown(int totalTime, ETimerType timerType) 116 { 117 this.timerType = timerType; 118 if (null == mLabel) 119 mLabel = GetComponent<UILabel>(); 120 this.totalTime = totalTime; 121 interval = 0; 122 enabled = true; 123 ShowTime(); 124 if (!gameObject.activeSelf) 125 gameObject.SetActive(true); 126 } 127 128 public static LabelTimer Begin(GameObject go, int totalTime, ETimerType timerType = ETimerType.CommonFormat) 129 { 130 LabelTimer lt = go.GetComponent<LabelTimer>(); 131 if (null == lt) lt = go.AddComponent<LabelTimer>(); 132 lt.StartCountDown(totalTime, timerType); 133 return lt; 134 } 135 }