Unity倒计时程序

用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);
    }

}

猜你喜欢

转载自blog.csdn.net/Abel02/article/details/133021360