Hướng dẫn về đồng hồ đếm ngược cho Unity

đồng hồ đếm ngược là đồng hồ ảo đếm từ thời gian đã đặt cho đến 0.

Để tạo đồng hồ đếm ngược ở dạng Unity, bạn cần tạo một tập lệnh lưu trữ lượng thời gian sẽ được đếm ngược và hiển thị ở định dạng 00:00.

Đồng hồ đếm ngược Unity ở góc trên bên trái.

Bộ đếm thời gian sẽ có các định dạng sau:

  • Ngày:Giờ:Phút:Giây:Mili giây
  • Giờ:Phút:Giây:Mili giây
  • Phút:Giây:Mili giây
  • Giây:Mili giây
  • Cộng với tất cả những điều trên nhưng không có mili giây

bước

Để tạo đồng hồ đếm ngược trong Unity, hãy làm theo các bước bên dưới:

  • Tạo một tập lệnh mới, gọi nó là 'SC_CountdownTimer', xóa mọi thứ khỏi tập lệnh rồi dán mã bên dưới:
  • Tập lệnh đồng hồ đếm ngược C# sẽ trừ tổng giá trị cho đến khi đạt 0 và sẽ áp dụng thời gian được định dạng cho thành phần Văn bản.

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;
    }
}
  • Tạo văn bản giao diện người dùng mới bằng cách nhấp chuột phải vào chế độ xem Thứ bậc -> Giao diện người dùng -> Văn bản và đặt tên cho nó 'Countdown'

Unity tạo văn bản giao diện người dùng mới

  • Thay đổi 'Countdown' Căn chỉnh Rect Transform thành trên cùng bên trái, xoay thành (0, 1), Pos X và Pos Y thành 5, Chiều rộng thành 300 và Chiều cao thành 60

  • Thay đổi kiểu phông chữ 'Countdown' thành đậm, cỡ chữ thành 34, căn chỉnh sang giữa bên trái và màu thành màu trắng

Unity Text Component Inspector Arial Bold Font Size 34

  • Đính kèm tập lệnh SC_CountdownTimer vào đối tượng 'Countdown' có thành phần Văn bản.

Bạn sẽ nhận thấy tập lệnh có một vài biến:

  • Định dạng đếm ngược kiểm soát đơn vị thời gian nào sẽ được đưa vào định dạng chuỗi.
  • Hiển thị các điều khiển Milliseconds nếu số mili giây sẽ được hiển thị.
  • Countdown Time là khoảng thời gian đếm ngược tính bằng giây, ví dụ giá trị 600 tương ứng với 10 phút.

Sau khi nhấn Play bạn sẽ thấy văn bản được điền bằng đồng hồ đếm ngược:

Tại 0 giây, tập lệnh sẽ in một dòng trong bảng điều khiển, báo hiệu rằng quá trình đếm ngược đã kết thúc, hãy sử dụng phần tập lệnh đó để thêm chức năng của riêng bạn.