倒计时
使用协程实现倒计时
可以封装成为一个工具类,用的时候直接调用即可
using DY.Utils;
using System.Collections;
using TMPro;
using UnityEngine;
/// <summary>
/// 倒计时 脚本
/// 放置位置:任意一个对象下即可
/// </summary>
public class CountTime
{
/// <summary>
/// 倒计时多久,单位:秒
/// </summary>
private float timer = 30;
/// <summary>
/// 当前剩余时间
/// </summary>
private float remainTime;
private TextMeshPro textMeshPro;
public CountTime(float time, Vector3? localPos = null)
{
if(localPos == null) localPos = Vector3.zero;
this.timer = time;
this.remainTime = timer;
string textTimer = "00:30";
textMeshPro = DYCreateUtils.CreateWroldTextPro(textTimer, "CountDown", null, (Vector3)localPos);
}
public IEnumerator StartCountDown()
{
WaitForSeconds waitForSeconds = new WaitForSeconds(1);
while(remainTime > 0)
{
HandleremainTime();
yield return waitForSeconds;
}
yield return null;
}
private void HandleremainTime()
{
remainTime--;
int min = (int)remainTime / 60;
int second = (int)remainTime % 60;
// int fragment = (int)(remainTime * 100 % 100);
textMeshPro.text = string.Format("{0:00}:{1:00}", min, second);
}
}
正计时
using TMPro;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// 倒计时 脚本
/// 放置位置:任意一个对象下即可
/// </summary>
public class Timer : MonoBehaviour
{
public static Timer Instance;
private void Awake()
{
if(Instance == null)
{
Instance = this;
}
}
public float currentTimer = 0;
[SerializeField] TextMeshProUGUI textTimer;
/// <summary>
/// 是否计时
/// </summary>
bool isTimer;
private void Start()
{
isTimer = true;
currentTimer = 0;
}
private void Update()
{
if (!isTimer) return;
currentTimer += Time.deltaTime;
int min = (int)currentTimer / 60;
int second = (int)currentTimer % 60;
textTimer.text = string.Format("{0:00}:{1:00}", min, second);
}
/// <summary>
/// 结束计时
/// </summary>
public void EndTimer(UnityAction action)
{
isTimer = false;
action?.Invoke();
}
}
评论区