How to access a variable from a game object once instantiated (C#)

This is a bit hard to explain, but here goes. I’m trying to keep track of my games score. When the enemy gets touched by the projectile, it adds one to the public score variable in the score script on a GUI text.

The problem I’m having, in that since the enemies are spawned with instantiate, I can’t access the variables any more due to it being a prefab.
When I drag the GUI score into the public script box it’s fine, but when I make it a prefab again, it’s not.

Here is the GUI script:

using UnityEngine;
using System.Collections;

public class Score : MonoBehaviour {
	
	public int score;
	
	void Start () {
		
		 score = 0;
	}
	
	
	void Update () {
	
		guiText.text = "" +score;
	}
}

And here is the enemy script attached to a game object in witch is instantiated:

using UnityEngine;
using System.Collections;

public class enemy : MonoBehaviour {
	
	public Score script;
	
    void OnCollisionEnter (Collision col)
		
    {
        	script.score =+ 1;	
            Destroy(gameObject);
    }
}

I’m new with using variables in different scrips; I would really appreciated it if someone could help explain to me how I could make this work.

If you make the variable static ‘public static int score’, you could call it by using ‘Score.score’, but it’s better imo just to keep it public ‘public int score’, and calling using GetComponent.

using UnityEngine;
using System.Collections;
 
public class enemy : MonoBehaviour 
{ 
    void OnCollisionEnter (Collision col)
    {
        if(col.gameObject.GetComponent<Score>())
        {
            col.gameObject.GetComponent<Score>().score += 1; 
            Destroy(gameObject);
        }
    }
}