首页 > 技术文章 > Unity3D_UGUI倒计时_比较精准的倒计时

kao-la-bao-bei 2020-09-10 10:04 原文

可能倒计时的功能太简单了,没有找到关于倒计时的博客参考,所以本人自己写了倒计时的功能,希望能帮助做Unity的小伙伴们绕过一些坑。

实现效果如下:

Hierarchy 面板层级关系:

 

 将C#脚本挂载到“Text_CounDown”上运行,即可实现如图所示功能。

C#脚本如下:

using UnityEngine;
using UnityEngine.UI;

public class UserSystem : MonoBehaviour
{
    // 用于现实倒计时的 UI 组件
    private Text counDown;
    // 用于积累时间(累加 Time.deltaTime)
    private float timeFloat;
    // 需要倒计时多长时间(以 分 为单位)
    [Range(0f, 10f)]
   public float min = 5.05f; // 用于显示倒计时的分钟数 private int minInt; // 用于显示倒计时的秒数 private int secondInt; private void Start() { // 得到用于现实倒计时的 UI 组件 counDown = transform.Find("Text_CountDown").GetComponent<Text>(); // 赋值分钟数 minInt = (int)min; // 赋值秒数(分钟数为 0 时需要判断,否则除数为 0 会报错)
       if (minInt == 0) secondInt = (int)(min * 60);
       else secondInt = (int)((min % minInt) * 60);
// 赋值倒计时秒数的初始值
        timeFloat = 60 - secondInt;
    }
    private void Update()
    {
        // 倒计时秒数降到 0 以下时,分钟数下降 1
        if(60 - timeFloat < 0)
        {
            // 更新秒数
            timeFloat -= 60f;
            // 分钟数下降 1
            minInt--;
            // 当倒计时为 0 时,调用一个方法 或 切换场景
            if (minInt < 0)
            {
                // TODO
            }
        }
        // 累加时间(将倒计时的误差降到最低)
        timeFloat += Time.deltaTime;
        // 更新 秒数
        secondInt = (int)(60 - timeFloat);
        
        counDown.text = minInt.ToString("00") + "" + secondInt.ToString("00");
    }
}

 

推荐阅读