Tutoriel sur le compte à rebours pour Unity

Un compte à rebours est une horloge virtuelle qui compte à partir d'une heure définie jusqu'à 0.

Pour créer un compte à rebours dans Unity, vous devrez créer un script qui stockera la durée du compte à rebours et l'affichera à 00:00. format.

Coin supérieur gauche du compte à rebours Unity.

La minuterie présentera ces formats:

  • Jours: Heures: Minutes: Secondes: Millisecondes
  • Heures: Minutes: Secondes: Millisecondes
  • Minutes: secondes: millisecondes
  • Secondes: millisecondes
  • Plus tout ce qui précède mais sans millisecondes

Pas

Pour créer un compte à rebours dans Unity, suivez les étapes ci-dessous:

  • Créez un nouveau script, appelez-le 'SC_CountdownTimer', supprimez tout puis collez le code ci-dessous:
  • Le script du compte à rebours C# soustraira de la valeur totale jusqu'à atteindre 0 et appliquera le temps formaté à un élément Texte.

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;
    }
}
  • Créez un nouveau texte d'interface utilisateur en cliquant avec le bouton droit sur la vue Hiérarchie -> UI -> Texte et nommez-le 'Countdown'

Unity crée un nouveau texte d'interface utilisateur

  • Modifiez l'alignement de 'Countdown' Rect Transform en haut à gauche, pivotez sur (0, 1), Pos X et Pos Y sur 5, Largeur sur 300 et Hauteur sur 60.

  • Modifiez le style de police du texte 'Countdown' en gras, la taille de la police en 34, l'alignement au centre gauche et la couleur en blanc.

Inspecteur de composants de texte Unity Arial Bold Taille de police 34

  • Attachez le script SC_CountdownTimer à l'objet 'Countdown' qui possède un composant Texte.

Vous remarquerez que le script comporte quelques variables:

  • Formatage du compte à rebours contrôle les unités de temps qui seront incluses dans le formatage de la chaîne.
  • Afficher les millisecondes contrôle si le nombre de millisecondes doit être affiché.
  • Countdown Time est la durée du compte à rebours en secondes, par exemple, la valeur 600 correspond à 10 minutes.

Après avoir appuyé sur Lecture, vous devriez remarquer le texte rempli d'un compte à rebours:

À 0 secondes, le script imprimera une ligne dans la console, signalant que le compte à rebours est terminé, utilisez cette partie du script pour ajouter votre propre fonctionnalité.