מדריך טיימר ספירה לאחור עבור Unity

טיימר הוא שעון וירטואלי שסופר מזמן מוגדר עד 0.

כדי ליצור טיימר ספירה לאחור ב-Unity, תצטרך ליצור סקריפט שיאחסן את משך הזמן שייספור לאחור ויציג אותו בפורמט 00:00.

טיימר ספירה לאחור של Unity בפינה השמאלית העליונה.

הטיימר יכלול את הפורמטים הבאים:

  • ימים:שעות:דקות:שניות:מילישניות
  • שעות: דקות: שניות: אלפיות שניות
  • דקות: שניות: אלפיות שניות
  • שניות: אלפיות שניות
  • בנוסף לכל האמור לעיל אך ללא אלפיות השנייה

שלבים

כדי ליצור טיימר ספירה לאחור ב-Unity, בצע את השלבים הבאים:

  • צור סקריפט חדש, קרא לו 'SC_CountdownTimer', הסר ממנו הכל ואז הדבק את הקוד למטה:
  • טיימר הספירה לאחור C# יגרע מהערך הכולל עד שיגיע ל-0 ויחיל את הזמן המעוצב על אלמנט טקסט.

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;
    }
}
  • צור טקסט ממשק משתמש חדש, על ידי לחיצה ימנית על תצוגת ההיררכיה -> ממשק משתמש -> טקסט ושם לו 'Countdown'

Unity צור טקסט חדש של ממשק משתמש

  • שנה את 'Countdown' ישר טרנספורמציה לפינה השמאלית העליונה, סובב ל-(0, 1), Pos X ו-Pos Y ל-5, רוחב ל-300, וגובה ל-60

  • שנה את 'Countdown' סגנון גופן הטקסט למודגש, גודל גופן ל-34, יישור למרכז שמאלי וצבע ללבן

Unity Text Component Inspector Arial Bold Font Size 34

  • צרף את הסקריפט SC_CountdownTimer לאובייקט 'Countdown' שיש לו רכיב טקסט.

תשים לב שלסקריפט יש כמה משתנים:

  • עיצוב ספירה לאחור שולט באילו יחידות זמן ייכללו בעיצוב המחרוזת.
  • Show Milliseconds קובע אם יש להציג את ספירת האלפיות השנייה.
  • זמן ספירה לאחור הוא משך הספירה לאחור בשניות, לדוגמה, הערך 600 מתאים ל-10 דקות.

לאחר הקשה על Play אתה אמור לשים לב לטקסט המאוכלס בטיימר ספירה לאחור:

ב-0 שניות הסקריפט ידפיס שורה בקונסולה, המאותת שהספירה לאחור הסתיימה, השתמש בחלק הזה של הסקריפט כדי להוסיף פונקציונליות משלך.