Tutorial Penghitung Waktu Mundur untuk Unity

penghitung waktu mundur adalah jam virtual yang dihitung dari waktu yang ditentukan hingga 0.

Untuk membuat Penghitung waktu mundur dalam Unity, Anda perlu membuat skrip yang akan menyimpan jumlah waktu yang akan dihitung mundur dan menampilkannya dalam format 00:00.

Penghitung waktu mundur kesatuan di pojok kiri atas.

Pengatur waktu akan menampilkan format berikut:

  • Hari:Jam:Menit:Detik:Milidetik
  • Jam: Menit: Detik: Milidetik
  • Menit:Detik:Milidetik
  • Detik: Milidetik
  • Ditambah semua hal di atas tetapi tanpa Milidetik

Langkah

Untuk membuat penghitung waktu mundur di Unity, ikuti langkah-langkah di bawah ini:

  • Buat skrip baru, beri nama 'SC_CountdownTimer', hapus semuanya lalu tempel kode di bawah ini:
  • Skrip penghitung waktu mundur C# akan mengurangi nilai total hingga mencapai 0 dan akan menerapkan waktu yang diformat ke elemen Teks.

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;
    }
}
  • Buat teks UI baru, dengan mengklik kanan pada tampilan Hierarchy -> UI -> Text dan beri nama 'Countdown'

Unity membuat teks UI baru

  • Ubah 'Countdown' Perataan Rect Transform ke kiri atas, pivot ke (0, 1), Pos X dan Pos Y ke 5, Lebar ke 300, dan Tinggi ke 60

  • Ubah 'Countdown' Text Font Style menjadi Bold, Font Size menjadi 34, Alignment menjadi Left Center, dan Color menjadi putih

Inspektur Komponen Teks Unity Arial Bold Ukuran Font 34

  • Lampirkan skrip SC_CountdownTimer ke objek 'Countdown' yang memiliki komponen Teks.

Anda akan melihat skrip memiliki beberapa variabel:

  • Pemformatan Hitung Mundur mengontrol unit waktu yang akan disertakan dalam pemformatan string.
  • Tampilkan kontrol Milidetik jika hitungan milidetik harus ditampilkan.
  • Waktu Hitung Mundur adalah durasi hitungan mundur dalam detik, misalnya, nilai 600 sama dengan 10 menit.

Setelah menekan Play Anda akan melihat teks diisi dengan penghitung waktu mundur:

Pada 0 detik skrip akan mencetak baris di konsol, menandakan bahwa hitungan mundur telah selesai, gunakan bagian skrip tersebut untuk menambahkan fungsionalitas Anda sendiri.

Artikel yang Disarankan
Tutorial Serangan Jarak Dekat 2D untuk Unity
Penghitung FPS Persatuan
Skrip Penembakan Senjata Berbasis Raycast dan Proyektil untuk Unity
Cara Mengatur Pengontrol Joystick untuk Gerakan di Unity
Aset Unity Teratas dari Penyimpanan Aset
Pemilihan Unit Bergaya RTS untuk Persatuan
Editor Peta Ketinggian Medan dalam game untuk Unity