Tutorial sul timer per il conto alla rovescia per Unity

Un timer per il conto alla rovescia è un orologio virtuale che conta da un tempo impostato fino allo 0.

Per creare un timer per il conto alla rovescia in Unity, dovrai creare uno script che memorizzerà la quantità di tempo che verrà contata alla rovescia e lo visualizzerà in 00:00 formato.

Conto alla rovescia per unità nell'angolo in alto a sinistra.

Il timer presenterà questi formati:

  • Giorni:Ore:Minuti:Secondi:Millisecondi
  • Ore:Minuti:Secondi:Millisecondi
  • Minuti:Secondi:Millisecondi
  • Secondi:millisecondi
  • Inoltre tutto quanto sopra ma senza millisecondi

Passi

Per creare un timer per il conto alla rovescia in Unity, procedi nel seguente modo:

  • Crea un nuovo script, chiamalo 'SC_CountdownTimer', rimuovi tutto da esso quindi incolla il codice seguente:
  • Lo script del timer per il conto alla rovescia C# sottrarrà dal valore totale fino a raggiungere 0 e applicherà il tempo formattato a un elemento di testo.

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 un nuovo testo dell'interfaccia utente facendo clic con il pulsante destro del mouse sulla visualizzazione Gerarchia -> Interfaccia utente -> Testo e assegnagli un nome 'Countdown'

Unity crea un nuovo testo dell'interfaccia utente

  • Cambia l'allineamento di 'Countdown' Rect Transform in alto a sinistra, pivot su (0, 1), Pos X e Pos Y su 5, Larghezza su 300 e Altezza su 60

  • Cambia lo stile del carattere del testo 'Countdown' in grassetto, la dimensione del carattere in 34, l'allineamento al centro a sinistra e il colore in bianco

Ispettore componente testo Unity Arial dimensione carattere grassetto 34

  • Allega lo script SC_CountdownTimer all'oggetto 'Countdown' che ha un componente Testo.

Noterai che lo script ha alcune variabili:

  • Formattazione conto alla rovescia controlla quali unità di tempo saranno incluse nella formattazione della stringa.
  • Mostra millisecondi controlla se deve essere mostrato il conteggio dei millisecondi.
  • Countdown Time è la durata del conto alla rovescia in secondi, ad esempio il valore 600 corrisponde a 10 minuti.

Dopo aver premuto Riproduci dovresti notare il testo popolato con un timer per il conto alla rovescia:

A 0 secondi lo script stamperà una riga nella console, segnalando che il conto alla rovescia è terminato, usa quella parte dello script per aggiungere le tue funzionalità.

Articoli suggeriti
Script per creare un interruttore della luce in Unity
Script di tiro con pistola basato su Raycast e proiettili per Unity
Come impostare il controller joystick per il movimento in Unity
Tutorial sull'attacco corpo a corpo 2D per Unity
Editor della mappa dell'altezza del terreno nel gioco per Unity
Una risorsa unitaria completa per ambienti acquatici immersivi
Script per l'aspetto del mouse per Unity