Samouczek odliczania czasu dla Unity

minutnik to wirtualny zegar, który odlicza czas od ustawionego czasu do 0.

Aby utworzyć licznik czasu w Unity, musisz utworzyć skrypt, który będzie przechowywać ilość czasu, który będzie odliczany i wyświetlać ją w formacie 00:00.

Minutnik Unity w lewym górnym rogu.

Timer będzie zawierał następujące formaty:

  • Dni: godziny: minuty: sekundy: milisekundy
  • Godziny: minuty: sekundy: milisekundy
  • Minuty:Sekundy:Milisekundy
  • Sekundy: milisekundy
  • Plus wszystkie powyższe, ale bez milisekund

Kroki

Aby ustawić minutnik w Unity, wykonaj poniższe czynności:

  • Utwórz nowy skrypt, nazwij go 'SC_CountdownTimer', usuń z niego wszystko i wklej poniższy kod:
  • Skrypt licznika czasu C# będzie odejmował od całkowitej wartości aż do osiągnięcia 0 i zastosuje sformatowany czas do elementu tekstowego.

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;
    }
}
  • Utwórz nowy tekst interfejsu użytkownika, klikając prawym przyciskiem myszy widok Hierarchia -> Interfejs użytkownika -> Tekst i nadaj mu nazwę 'Countdown'

Unity tworzy nowy tekst interfejsu użytkownika

  • Zmień 'Countdown' Rect Transform wyrównanie w lewy górny róg, obróć do (0, 1), Poz. X i Poz. Y na 5, Szerokość na 300 i Wysokość na 60

  • Zmień styl czcionki 'Countdown' na pogrubiony, rozmiar czcionki na 34, wyrównanie do lewego środka i kolor na biały

Inspektor komponentów tekstu Unity Arial pogrubiona czcionka Rozmiar 34

  • Dołącz skrypt SC_CountdownTimer do obiektu 'Countdown' zawierającego komponent Tekst.

Zauważysz, że skrypt ma kilka zmiennych:

  • Formatowanie odliczania kontroluje, jakie jednostki czasu zostaną uwzględnione w formatowaniu ciągu.
  • Pokaż elementy sterujące Millisekundy, jeśli ma być wyświetlana liczba milisekund.
  • Czas odliczania to czas trwania odliczania w sekundach, na przykład wartość 600 odpowiada 10 minutom.

Po naciśnięciu Play powinieneś zauważyć tekst wypełniony licznikiem czasu:

O 0 sekundach skrypt wypisze linię w konsoli sygnalizującą zakończenie odliczania. Użyj tej części skryptu, aby dodać własną funkcjonalność.

Sugerowane artykuły
Samouczek ataku wręcz 2D dla Unity
Ultimate Spawner 2.0 — zasób zmieniający zasady gry
Skrypt wyglądu myszy dla Unity
Wybór jednostek w stylu RTS dla Unity
Edytor mapy wysokości terenu w grze dla Unity
Zone Controller Pro — pakiet Unity Asset Store
Jak korzystać z nowego systemu wodnego HDRP w Unity