How to keep variable value

I have a piece of code that I have attached to many game objects. In this script, the player is supposed to enter the meaning and gets 5 points for the correct answer.

private var inRange: boolean = false;
var myStyle = new GUIStyle();
var score:int;
public var mess: String = "Clue";
var stringToEdit : String = "Remove this and enter meaning";
var finalstring:String="nil";
function OnTriggerEnter(other:Collider) 
{
    if (other.tag == "Player")
    {
        inRange =  true;
    }
}

function OnTriggerExit(other:Collider) 
{
    if (other.tag == "Player") 
    {
        inRange =  false;
    }
    if(score==5)
	{
		score=5;
	}
}

	


function Update(){
 	if(finalstring==stringToEdit)
 	{
 		score=score+5;
 	}
 	if(score==5)
 	{
 		stringToEdit="null";
 	}
}

function Start()
{
	if(score==5)
	{
		score=5;
	}
}

function OnGUI () 
{
    
     if(inRange)
		{
		GUI.Label (Rect (10, 10, 100, 20),"Score: " +score.ToString()); 
		// Make a text field that modifies stringToEdit.
		stringToEdit = GUI.TextField (Rect (10, 50, 1000, 20), stringToEdit, 25);
		GUI.Label (Rect (10, 30, 2000, 1000),"Clue: " +mess,myStyle);
		}
}

The problem is that whenever the player moves on to the next object after getting 5 points, the score resets to 0. how to keep the score as it is

It’s not that the score resets on each Game Object, it’s that you save the score on a single GameObject-basis. This means each GameObject has a different idea of what the score is.

To remedy this, the simplest solution is to use a static variable. So, instead of var score:int; have static var score:int;. Static means that the same value is shared between all instances of that class.

Several other things about your code, I feel need pointing out, are the if blocks on lines 43 and 21. Setting score to 5 if it already is 5 seems unnecessary to me. Further, your Update method will work better if it’s:

if(finalstring==stringToEdit)
{
  score=score+5;
  stringToEdit="null";
}

This way it’ll change stringToEdit each time a correct answer is entered, as opposed to when the correct answer is entered and the score is 5 (causing the score to increase indefinately after the first correct answer).

One more problem I see with this design, is that the player is able to answer a question multiple times, each time adding 5 to score. The simplest solution is to use an isAnswered boolean flag, which is set to true within the above if clause and checked to be false before awarding any points.

As far as I can tell the problem is that each object has its own score variable and draws its own label.

I would create a separate static object containing a variable to handle the total score and to draw the label. Then each object could pass its score value over to that scoreCounter object (or whatever you want to call it) where it is then added to the total score.

You need a solid gameobject to carry over from scene to scene at the start of each scene all previous gameobject are destroyed in a start functionon a gameobject you keep use DontDestroyOnLoad() I think is the command and you won’t loose the data