Need help getting the screen to fade.

I’m trying to get the screen to darken when I start the game and when I restart. I have followed a tutorial for this but was not very clear.

public class ScreenFader : MonoBehaviour {
    
    // Holds the texutre to fill the screen
	[SerializeField] Texture2D fadeTexture;
    [SerializeField] Color colorStart = Color.black;
    [SerializeField] Color colorEnd = Color.clear;

    

    // Time to completion to fade
    [SerializeField]float fadeTime = 1.0f;

    // The container for the functions to be triggered when the fade has complete
    private event FadeCompleteEvent OnFadeComplete = null;

    // Defines the type of function which is used as a delegate
    public delegate void FadeCompleteEvent();

    // Internally used to track the passage of time
    private float timer = 0.0f;
    
    // Loads a prefab and create an instance from it
    static public void CreateFade (string _prefabName,
                                    FadeCompleteEvent _completeEvent) {
    // Load the asset as a basic object
    Object fadePrefab = Resources.Load(_prefabName, typeof(Object));
    
    // Create a new game object from the loaded prefab
    GameObject fadeObject = Instantiate( fadePrefab) as GameObject;
    
    // Find the fader's script component an assign the event
    ScreenFader fader = fadeObject.GetComponent<ScreenFader>();
    fader.OnFadeComplete = _completeEvent;

    }
    
    // Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	    // Accumulate the passage of time
        timer += Time.fixedDeltaTime;

                  
        
        // Duration has been satisfied?
        if (timer > fadeTime)
        {
            timer = fadeTime;
        }
        if (OnFadeComplete != null)
        {
            OnFadeComplete(); 
            OnFadeComplete = null;
            Destroy(gameObject, 0.1f);           
        }
	}
    void OnGui() { 
      // Determine the passage of time as
      // a precentage of the duration time
        float percent = timer / fadeTime;
      
      // Use the percentage to the determine the
      // gradient between the two
        GUI.color = Color.Lerp(colorStart, colorEnd, percent);
      
      // Create a rectangle the size of the screen
      Rect screenRectangle = new Rect(0, 0, Screen.width, Screen.height);
      
      // Draw the texture filling the entire screen
      GUI.DrawTexture(screenRectangle, fadeTexture);

    }

  }

public class CoreGame : MonoBehaviour {

[SerializeField] GameObject pauseMenu;

// Stores the current pause state;
private bool paused = false;

// Use this for initialization
void Start () {
    ScreenFader.CreateFade("ScreenFadeUp", FadeUpCompleted);

    // Hide the pause menu intitially
    HandlePause(false);
}

// Update is called once per frame
void Update () {
    // Exit early if paused
    if (paused)
    {
        return;
    }
    
    CheckInput();
    
    

}
static public void MakeChild(GameObject _child) { 

    GameObject coreGameObj = GameObject.Find("CoreGame");

    // Assign the child's transform's parent to the
    // recently found core game's transform
    _child.transform.parent = coreGameObj.transform;

}
void CheckInput()
{
    // User has pressed pause?
    if (Input.GetKeyUp(KeyCode.P))
    {

        HandlePause(!paused);
    }
}
// Method to modify pause status
private void SetPaused(bool _paused)
{
    paused = _paused;

}
void FadeUpCompleted() {
    Debug.Log("Fade UP has completed!");
}

// Handles the actions of the pause event
public void HandlePause(bool _pause) {
    
    paused = _pause;
     // Send a message to all children
        BroadcastMessage("SetPaused", paused);
        paused = !paused;
        Debug.Log("Pause Key has been pressed!");
        if (paused)
        {
            Time.timeScale = 0;
        }
        else
        {
            Time.timeScale = 1;
        }
        pauseMenu.SetActive(paused);
    }

}

public class PauseResume : MenuButtonBase {

// reference to the core game object
public CoreGame coreGame;

// Call on button up
protected override void doButtonAction()
{
    coreGame.HandlePause(false);
}

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}

}

public class PauseRestart : MenuButtonBase {

// Called on button up
protected override void doButtonAction()
{
    ScreenFader.CreateFade("ScreenFadeDown", FadeDownCompleted);
}

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}
void FadeDownCompleted() {
    Application.LoadLevel("Project");
}

}

try adding a GUI image that is black and animate it to change the alpha value, and make the script that changes the scene change the animation. contact me if you need more info, am i very happy to help!

I was able to fix it. OnFadeComplete = null; and Destroy(gameObject, 0.1f); where both inside the IF-statement and moving out of it fixed the issue.