'Unity Displaying Best Times

I am creating a small game with five levels and a timer to see how fast the player can complete all five levels. I have a script that is supposed to take the finished time from the timer and convert it to a PlayerPref so that it can always be saved to the leaderboard. Eash leaderboard entry is its own separate text object, with its own script.

public class ScoreTimer01 : MonoBehaviour
{
    public Text theText;

    public void Awake()
    {
        theText.text = GetComponent<Text>().text;
        if (PlayerPrefs.HasKey("time0")) 
        {
            theText.text = PlayerPrefs.GetFloat("time0").ToString("mm':'ss'.'ff");
        }
        else
        {
            theText.text = "0";
        }
    }
}

But the leaderboard texts never change, is there something that I am missing? Here is the timer script:

public class Timer : MonoBehaviour
{

    Text text;
    float theTime;
    public float speed = 1;
    public static bool playing;

    static List<float> bestTimes = new List<float>();
    static int totalScores = 5;
    
    void Awake()
    {
        LoadTimes();
    }
    
    // Start is called before the first frame update
    void Start()
    {
        text = GetComponent<Text>();
        playing = true;
    }

    static public void EndTimer()
    {
        playing = false;
        
        CheckTime(FinalTime.finalTime);
    }

    // Update is called once per frame
    void Update()
    {   
        if(playing == true)
        {
            TimerController.theTime += Time.deltaTime * speed;
            int minutes = (int)(TimerController.theTime / 60f) % 60;
            int seconds = (int)(TimerController.theTime % 60f);
            int milliseconds = (int)(TimerController.theTime * 1000f) % 1000;

            text.text = "Time: " + minutes.ToString("D2") + ":" + seconds.ToString("D2") + ":" + milliseconds.ToString("D2");
        }
        
    }

    static public void LoadTimes() 
    {
        for (int i = 0; i < totalScores; i++) 
        {
            string key = "time" + i;
            if (PlayerPrefs.HasKey(key)) 
            {
                bestTimes.Add(PlayerPrefs.GetFloat(key));
            }
        }
    }

    static public void CheckTime(float time) 
    {
        // if there are not enough scores in the list, go ahead and add it
        if (bestTimes.Count < totalScores) 
        {
            bestTimes.Add(time);

            // make sure the times are in order from highest to lowest
            bestTimes.Sort((a, b) => b.CompareTo(a));
            SaveTimes();
        } 
        else 
        {
            for (int i = 0; i < bestTimes.Count; i++) 
            {
                // if the time is smaller, insert it
                if (time < bestTimes[i]) 
                {
                    bestTimes.Insert(i, time);

                    // remove the last item in the list
                    bestTimes.RemoveAt(bestTimes.Count - 1);
                    SaveTimes();
                    break;
                }
            }
        }
    }

    static public void SaveTimes() 
    {
        for (int i = 0; i < bestTimes.Count; i++) 
        {
            string key = "time" + i;
            PlayerPrefs.SetFloat(key, bestTimes[i]);
        }
    }

    void OnDestroy()
    {
        PlayerPrefs.Save();
    }
}

I can't figure out if the PlayerPrefs are not saving correctly or the script to change the text is incorrect. I am very new to C# and unity as a whole, so any help is appreciated.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source