Problem with Counting Collisions

Very simply I’m doing the Beginner Challenge 3, and I’m pretty sure I got everything down the only problem is this weird bug I can’t figure out. I have it so when my sphere is launched and hits a box my score updates by adding one to score. This all works just fine…the first time.

Afterwards it never updates, and it seems it’s only the “Score++;” that doesn’t work anymore after the first “hit”. I’ve done Debug.Log messages to see if it’s even running through the if logic and it does, it displays every time I hit the cubes again, it just doesn’t add one to score. I also checked if it’s a cube problem, but the same thing happens on each cube when their first hit.

I’ve also tried using “Score = Score + 1;”, “Score+=1;” to no avail. Lastly, I’ve checked the GUIText and it can change just fine if I have it display something different from hitting the floor to a cube, so I’m pretty sure it’s just the Score++; part that isn’t working right.

TL;DR: A Score++; counting variable for counting sphere to cube collisions isn’t incrementing after the first hit.

Update: I got around this by creating another script that updates the score by accessing another script on the GUIText. Basically what’s done here:Changing variables in another script - Questions & Answers - Unity Discussions

Code:

var Score : int = 0;

function OnCollisionEnter(hit : Collision)
{

var myText : GUIText = gameObject.Find("GUI Text").GetComponent(GUIText);

if(hit.gameObject.name == "cCube")
{
	//(I added a Debug.Log message here to check the value of Score, it seems to reset to 0 here everytime whether or not the variable is declared outside or inside the function.)
	Score++;
	myText.text = "Score: " + Score;
	
	
	Destroy(gameObject.Find("FireCannon(Clone)"));

}
else if(hit.gameObject.name == "bCube")
{
	Score++;
	myText.text = "Score: " + Score;
	
	Destroy(gameObject.Find("FireCannon(Clone)"));
}
else if(hit.gameObject.name == "aCube")
{
	Score++;
	myText.text = "Score: " + Score;
	
	Destroy(gameObject.Find("FireCannon(Clone)"));	
}

}

From what I see of you code Score will always equal 1 at the end of OnCollisionEnter. This is because you declare the variable within the method. If you want to use it as a counter between OnCollisionEnter calls then you need to declare it as a member variable; outside of the scope of your method. :wink:

Didn’t work, I should have put that I tried that already. I’ve tried putting the declaration both inside the function and outside at the beginning like normal. This code was just when the last time I had it inside. It also isn’t resetting to 0 either, it starts at 0, I hit a block it goes to 1 then any time after that it just stays at 1. I can hit any block and it won’t go up or down or anything. I’ve tried setting the floor to work the same way where it adds 1 when it hits the floor and the same thing happens.

(In response to iwaldrop, still new to the forums)