Tutorial cu cronometrul de numărătoare inversă pentru Unity

Un cronometru invers ​​este un ceas virtual care numără de la o oră stabilită până la 0.

Pentru a face un cronometru cu numărătoare inversă în Unity, va trebui să creați un script care va stoca timpul care va fi numărat invers și îl va afișa în format 00:00.

Cronometru cu numărătoare inversă Unity, colțul din stânga sus.

Cronometrul va avea următoarele formate:

  • Zile:Ore:Minute:Secunde:Milisecunde
  • Ore:Minute:Secunde:Milisecunde
  • Minute:Secunde:Milisecunde
  • Secunde: milisecunde
  • Plus toate cele de mai sus, dar fără milisecunde

Pași

Pentru a face o numărătoare inversă în Unity, urmați pașii de mai jos:

  • Creați un script nou, numiți-l 'SC_CountdownTimer', eliminați totul din el, apoi lipiți codul de mai jos:
  • Cronometrul de numărătoare inversă C# va scădea din valoarea totală până la atingerea 0 și va aplica timpul formatat unui element Text.

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;
    }
}
  • Creați un nou text UI, făcând clic dreapta pe vizualizarea Ierarhie -> UI -> Text și denumește-l 'Countdown'

Unity creează un nou text pentru interfața de utilizare

  • Schimbați 'Countdown' Rect Transform alinierea în stânga sus, pivotați la (0, 1), Poz X și Poz Y la 5, Lățime la 300 și Înălțime la 60

  • Schimbați stilul fontului text 'Countdown' la Bold, Dimensiunea fontului la 34, Alinierea la centrul stâng și Culoarea în alb

Unity Text Component Inspector Arial Bold Dimensiunea fontului 34

  • Atașați scriptul SC_CountdownTimer la obiectul 'Countdown' care are o componentă Text.

Veți observa că scriptul are câteva variabile:

  • Formatarea numărătoarea inversă controlează ce unități de timp vor fi incluse în formatarea șirului.
  • Afișare milisecunde controlează dacă ar trebui afișat numărul de milisecunde.
  • Timpul de numărătoare inversă este durata numărătorii inverse în secunde, de exemplu, valoarea 600 corespunde la 10 minute.

După ce apăsați Play, ar trebui să observați textul populat cu un cronometru cu numărătoare inversă:

La 0 secunde scriptul va imprima o linie în consolă, semnalând că numărătoarea inversă s-a terminat, utilizați acea parte a scriptului pentru a adăuga propria dvs. funcționalitate.

Articole sugerate
Script de împușcare cu arma Raycast și proiectile pentru Unity
Cum să configurați controlerul cu joystick pentru mișcare în Unity
Tutorial de atac corp la corp 2D pentru Unity
Editor de hărți de înălțime a terenului în joc pentru Unity
FPC Swimmer - Un activ unitar cuprinzător pentru medii de apă imersive
Mouse Look Script pentru Unity
Cum să utilizați controlerul Xbox în Unity