My timer is stopping when the new scene is loaded, here is my code

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{

public GameObject pauseMenu;
public GameObject normalMenu;
public PlayerMovement movement;
public MoveCamera cameramove;
bool gameIsPaused = false;
public Transform player;
public float belowlimit = -30f;

void Start()
{
    Cursor.visible = false;
    Cursor.lockState = CursorLockMode.Locked;
    movement.enabled = true;
    cameramove.enabled = true;
    gameIsPaused = false;
    normalMenu.SetActive(true);
    pauseMenu.SetActive(false);
    Time.timeScale = 1f;

    if (Tutorial == SceneManager.GetActiveScene().name)
    {
        InvokeRepeating("updateTimer", 1, 1);
    }

    if (SceneManager.GetActiveScene().buildIndex > 1 && currentTime < 0)
    {
        InvokeRepeating("updateTimer", 1, 1);
    }
    timerText.text = currentTime.ToString();
}

void Update()
{
    if(Input.GetKeyDown(KeyCode.Tab))
    {
        if(gameIsPaused == false)
        {
            PauseGame();
        }else
        {
            Resume();
        }
    }

    if (player.position.y <= belowlimit)
    {
        die();
    }

    if (freeplay == SceneManager.GetActiveScene().name)
    {
        CancelInvoke("updateTimer");
    }

    timerText.text = currentTime.ToString();
}

void PauseGame()
{
    Time.timeScale = 0;
    pauseMenu.SetActive(true);
    normalMenu.SetActive(false);
    movement.enabled = false;
    cameramove.enabled = false;
    Cursor.lockState = CursorLockMode.None;
    Cursor.visible = true;
}

public void RetryGame()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    movement.enabled = true;
    cameramove.enabled = true;
    Cursor.lockState = CursorLockMode.Locked;
    Cursor.visible = false;
    Time.timeScale = 1;
    
    
}

public void Resume()
{
    Time.timeScale = 1;
    pauseMenu.SetActive(false);
    normalMenu.SetActive(true);
    cameramove.enabled = true;
    movement.enabled = true;
    Cursor.visible = false;
    Cursor.lockState = CursorLockMode.Locked;
}

public void Menu()
{
    SceneManager.LoadScene(0);
    Time.timeScale = 1;
    pauseMenu.SetActive(false);
    normalMenu.SetActive(true);
    cameramove.enabled = true;
    movement.enabled = true;
    normalMenu.SetActive(true);
    pauseMenu.SetActive(false);
    CancelInvoke("updateTimer");
    currentTime = 0;
}

public void CompleteLevel()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
    InvokeRepeating("updateTimer", 1, 1);
    currentTime = currentTime;

}

public void die()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

}

//Speedrunner
public static int currentTime = 0;
public string Tutorial = "tutorial";
public string freeplay = "freeplay";
public Text timerText;

public void updateTimer()
{
    currentTime = currentTime + 1;
}

}

@brennancoughlin5293 Have you tried DontDestoryOnLoad();

void Awake()
    {
        DontDestroyOnLoad(this.gameObject);
    }