Hello,
Currently constructing a brick break style game in which when the player destroys a brick, the score should increment by 1; which it does, for the first brick but none of the others.
Why might this be?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class BrickScript : MonoBehaviour
{
//Score
int score = 0;
Text scoreText;
// Start is called before the first frame update
void Start()
{
scoreText = GameObject.Find("scoreText").GetComponent<Text>();
}
void OnCollisionEnter(Collision Other)
{
if (Other.gameObject.CompareTag ("Ball" ))
{
score++;
scoreText.text = "Score: " + score;
Destroy(gameObject);
}
}
}
First, this script where is attached? in the brick?
Then each brik have a score and a textscore variable. They are not “shared” between them, so in fact, the variables are changing, but always from 0 to 1 because each brick have its own score varable…
Solution 1, have a manager script with only 1 scroe varaible, and all briks increment that variable.
Solution 2, make the score variable “static”, this means that Unity will have only 1 single varaible shared by all “BrickScript” in the scene. But static variables require some little diferent ways to read them from the outside (from other scripts). But i supose for you level now it’s ok.
MY recomendation: You need to learn the basics, you should try to do the option 1 and the option 2. This way will understand how all this works. In the future, in your projects, you will use both methods multiple times, depending on the situation, so its recommended to learn to use all of them.