A simple timer using Coroutine



SimpleTimer.cs
using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class SimpleTimer : MonoBehaviour
{
    public Text timerTxt;
    public Button startTimerBtn;
    public Button stopTimerBtn;
    IEnumerator _timerCR;

    void Awake()
    {
        startTimerBtn.onClick.AddListener(StartTimerClick);
        stopTimerBtn.onClick.AddListener(StopTimerClick);
        ResetTimer();
    }

    #region button clicks
    void StartTimerClick()
    {
        _timerCR = StartTimer();
        StartCoroutine(_timerCR);
    }

    void StopTimerClick()
    {
        if(_timerCR!=null)
        {
            StopCoroutine(_timerCR);
            _timerCR = null;
        }
        ResetTimer();
    }
    #endregion

    #region start/reset timer
    IEnumerator StartTimer(int timeRemaining = 10)
    {
        startTimerBtn.interactable = false;
        stopTimerBtn.interactable = true;
        for (int i = timeRemaining; i > 0; i--)
        {
            timerTxt.text = i.ToString("00");
            yield return new WaitForSeconds(1);
        }
        ResetTimer();
    }

    void ResetTimer()
    {
        startTimerBtn.interactable = true;
        stopTimerBtn.interactable = false;
        timerTxt.text = "00";
    }
    #endregion
}