Unity 倒计时器教程

倒计时器是一个虚拟时钟,从设定时间计数到 0。

要在 Unity 中制作倒计时器,您需要创建一个脚本来存储倒计时的时间量并以 00:00 格式显示。

Unity 倒计时器左上角。

计时器将采用以下格式:

  • 天:小时:分钟:秒:毫秒
  • 小时:分钟:秒:毫秒
  • 分钟:秒:毫秒
  • 秒:毫秒
  • 加上以上所有内容,但没有毫秒

脚步

要在 Unity 中制作倒计时器,请按照以下步骤操作:

  • 创建 一个新脚本,将其命名为 'SC_CountdownTimer',删除其中的所有内容,然后粘贴以下代码:
  • 倒计时器 C# 脚本将从总值中减去,直到达到 0,并将格式化时间应用于文本元素。

SC_CountdownTimer.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SC_CountdownTimer : MonoBehaviour
{
    public enum CountdownFormatting { DaysHoursMinutesSeconds, HoursMinutesSeconds, MinutesSeconds, Seconds };
    public CountdownFormatting countdownFormatting = CountdownFormatting.MinutesSeconds; //Controls the way the timer string will be formatted
    public bool showMilliseconds = true; //Whether to show milliseconds in countdown formatting
    public double countdownTime = 600; //Countdown time in seconds

    Text countdownText;
    double countdownInternal;
    bool countdownOver = false;

    // Start is called before the first frame update
    void Start()
    {
        countdownText = GetComponent<Text>();
        countdownInternal = countdownTime; //Initialize countdown
    }

    void FixedUpdate()
    {
        if (countdownInternal > 0)
        {
            countdownInternal -= Time.deltaTime;

            //Clamp the timer value so it never goes below 0
            if (countdownInternal < 0)
            {
                countdownInternal = 0;
            }

            countdownText.text = FormatTime(countdownInternal, countdownFormatting, showMilliseconds);
        }
        else
        {
            if (!countdownOver)
            {
                countdownOver = true;

                Debug.Log("Countdown has finished running...");

                //Your code here...
            }
        }
    }

    string FormatTime(double time, CountdownFormatting formatting, bool includeMilliseconds)
    {
        string timeText = "";

        int intTime = (int)time;
        int days = intTime / 86400;
        int hoursTotal = intTime / 3600;
        int hoursFormatted = hoursTotal % 24;
        int minutesTotal = intTime / 60;
        int minutesFormatted = minutesTotal % 60;
        int secondsTotal = intTime;
        int secondsFormatted = intTime % 60;
        int milliseconds = (int)(time * 100);
        milliseconds = milliseconds % 100;

        if (includeMilliseconds)
        {
            if (formatting == CountdownFormatting.DaysHoursMinutesSeconds)
            {
                timeText = string.Format("{0:00}:{1:00}:{2:00}:{3:00}:{4:00}", days, hoursFormatted, minutesFormatted, secondsFormatted, milliseconds);
            }
            else if (formatting == CountdownFormatting.HoursMinutesSeconds)
            {
                timeText = string.Format("{0:00}:{1:00}:{2:00}:{3:00}", hoursTotal, minutesFormatted, secondsFormatted, milliseconds);
            }
            else if (formatting == CountdownFormatting.MinutesSeconds)
            {
                timeText = string.Format("{0:00}:{1:00}:{2:00}", minutesTotal, secondsFormatted, milliseconds);
            }
            else if (formatting == CountdownFormatting.Seconds)
            {
                timeText = string.Format("{0:00}:{1:00}", secondsTotal, milliseconds);
            }
        }
        else
        {
            if (formatting == CountdownFormatting.DaysHoursMinutesSeconds)
            {
                timeText = string.Format("{0:00}:{1:00}:{2:00}:{3:00}", days, hoursFormatted, minutesFormatted, secondsFormatted);
            }
            else if (formatting == CountdownFormatting.HoursMinutesSeconds)
            {
                timeText = string.Format("{0:00}:{1:00}:{2:00}", hoursTotal, minutesFormatted, secondsFormatted);
            }
            else if (formatting == CountdownFormatting.MinutesSeconds)
            {
                timeText = string.Format("{0:00}:{1:00}", minutesTotal, secondsFormatted);
            }
            else if (formatting == CountdownFormatting.Seconds)
            {
                timeText = string.Format("{0:00}", secondsTotal);
            }
        }

        return timeText;
    }
}
  • 创建一个新的 UI 文本,方法是右键单击“层次结构视图”->“UI”->“文本”并为其命名 'Countdown'

Unity创建新的UI文本

  • 将 'Countdown' 矩形变换对齐方式更改为左上角,枢轴更改为 (0, 1),Pos X 和 Pos Y 更改为 5,宽度更改为 300,高度更改为 60

  • 将 'Countdown' 文本字体样式更改为粗体,将字体大小更改为 34,将对齐方式更改为左中,将颜色更改为白色

Unity 文本组件检查器 Arial 粗体字体大小 34

  • SC_CountdownTimer 脚本附加到具有文本组件的'Countdown' 对象。

您会注意到该脚本有一些变量:

  • 倒计时格式 控制字符串格式中将包含哪些时间单位。
  • Show Milliseconds 控制是否应显示毫秒计数。
  • 倒计时时间 是以秒为单位的倒计时持续时间,例如,值 600 对应于 10 分钟。

Play 后,您应该注意到填充了倒计时器的文本:

0 秒时,脚本将在控制台中打印一行,表示倒计时已完成,使用脚本的该部分添加您自己的功能。

推荐文章
Zone Controller Pro - Unity Asset Store 包
如何在 Unity 中使用新的 HDRP 水系统
FPC Swimmer - 用于沉浸式水环境的综合 Unity 资产
Ultimate Spawner 2.0 - 改变游戏规则的资产
Unity 的鼠标查找脚本
Weather Maker - 将 Unity 环境提升到新高度
如何在 Unity 中使用 Xbox 控制器