Nedtellingstimeropplæring for Unity

En nedtellingstidtaker er en virtuell klokke som teller fra et angitt tidspunkt til 0.

For å lage en nedtellingstidtaker i Unity, må du lage et skript som lagrer tiden som telles ned og viser det klokken 00:00 format.

Unity nedtellingstidtaker øverst til venstre.

Tidtakeren vil ha disse formatene:

  • Dager: Timer: Minutter: Sekunder: Millisekunder
  • Timer: minutter: sekunder: millisekunder
  • Minutter: sekunder: millisekunder
  • Sekunder: millisekunder
  • Pluss alle de ovennevnte, men uten millisekunder

Trinn

For å lage en nedtelling i Unity, følg trinnene nedenfor:

  • Lag et nytt skript, kall det 'SC_CountdownTimer', fjern alt fra det og lim inn koden nedenfor:
  • Nedtellingstidtakeren C#-skriptet trekker fra den totale verdien til den når 0 og vil bruke den formaterte tiden på et tekstelement.

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;
    }
}
  • Opprett en ny UI-tekst ved å høyreklikke på hierarkivisningen -> UI -> Tekst og gi den et navn 'Countdown'

Unity oppretter ny UI-tekst

  • Endre 'Countdown' Rekt Transform justering til øverst til venstre, vri til (0, 1), Pos X og Pos Y til 5, Bredde til 300 og Høyde til 60

  • Endre 'Countdown' tekstskriftstil til fet skrift, skriftstørrelse til 34, justering til venstre senter og farge til hvit

Unity Text Component Inspector Arial fet skriftstørrelse 34

  • Fest SC_CountdownTimer-skriptet til 'Countdown'-objektet som har en tekst-komponent.

Du vil legge merke til at skriptet har noen få variabler:

  • Nedtellingsformatering kontrollerer hvilke tidsenheter som skal inkluderes i strengformateringen.
  • Vis millisekunder kontrollerer om millisekundtellingen skal vises.
  • Nedtellingstid er varigheten av nedtellingen i sekunder, for eksempel tilsvarer verdien 600 10 minutter.

Etter å ha trykket på Play bør du legge merke til teksten fylt med en nedtellingstidtaker:

Ved 0 sekunder vil skriptet skrive ut en linje i konsollen, som signaliserer at nedtellingen er fullført, bruk den delen av skriptet til å legge til din egen funksjonalitet.

Foreslåtte artikler
FPC Swimmer - En omfattende enhetsressurs for oppslukende vannmiljøer
Skript for å lage en lysbryter i Unity
Raycast og prosjektilbasert pistolskyteskript for Unity
Hvordan sette opp joystick-kontrolleren for bevegelse i enhet
2D nærkampangrepsopplæring for Unity
RTS-stil enhetsvalg for Unity
Terrenghøydekartredigerer i spillet for Unity