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.
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'
- 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
- 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ść.