用unity做了一个倒计时程序,功能有自定义设定倒计时时长、启动、暂停、暂停后继续执行倒计时等功能。
下面是代码:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Timer : MonoBehaviour
{
// 定义计时器的一些属性和变量
bool run = false; // 是否运行计时器
bool showTimeLeft = true; // 是否显示剩余时间
bool timeEnd = false; // 倒计时是否结束
float pausedTimeRemaining = 0.0f; //暂停前已过去的计数时间
float startTime = 0.0f; // 计时器开始的时间
float curTime = 0.0f; // 当前时间
string curStrTime = string.Empty; // 用于显示的时间字符串
bool pause = false; // 是否暂停计时器
public InputField inptuTime;
public float totalTime = 0.0f; // 倒计时总时间,单位为秒
float showTime = 0.0f; // 剩余时间
public Text guiTimer; // 用于显示计时器的 Text 组件
private GameObject startBtn;
private void Awake()
{
startBtn = transform.Find("Button").gameObject;
}
void ActiveObject(bool state)
{
inptuTime.gameObject.SetActive(state);
startBtn.SetActive(state);
}
// 运行计时器
public void RunTimer()
{
//输入需要倒计时的总时长,秒为单位
totalTime = float.Parse(inptuTime.text);
startTime = Time.time;
run = true;
ActiveObject(false);
}
/// <summary>
/// 暂停/恢复计时方法
/// </summary>
public void KeepOnTimer()
{
pause = !pause;
Text _tex = transform.Find("暂停/Text").GetComponent<Text>();
if (pause)
{
pausedTimeRemaining = Time.time - startTime;
_tex.text = "继续";
run = false;
}
else
{
startTime = Time.time - pausedTimeRemaining;
_tex.text = "暂停";
run = true;
}
}
// Update 方法在每一帧运行,用于更新计时器的状态和显示
void Update()
{
// 如果计时器被暂停,更新 startTime 并返回
if (pause)
{
startTime = startTime + Time.deltaTime;
return;
}
// 如果计时器正在运行,计算当前时间和已经流逝的时间
if (run)
{
curTime = Time.time - startTime;
}
// 如果需要显示剩余时间,计算剩余时间并检查倒计时是否结束
if (showTimeLeft)
{
showTime = totalTime - curTime;
if (showTime <= 0)
{
timeEnd = true;
showTime = 0;
}
}
// 更新计时器的显示
TimerEvent(showTime);
guiTimer.text = curStrTime;
}
/// <summary>
/// 将剩余时间转化为字符串
/// </summary>
/// <param name="_time"></param>
void TimerEvent(float _time)
{
int hour = (int)(_time / 3600);
int minutes = (int)(_time % 3600 / 60);
int seconds = (int)(_time % 60);
curStrTime = string.Format("{0:00}:{1:00}:{2:00}", hour, minutes, seconds);
}
}