So I have been consistently trying (and failing) to create a game with a score counter that increases by 1 upon each enemy being destroyed. In each case, however, the score value (which is an int) remains at 0. The enemies are spawned by an object (EnemySpawner) which is constantly in the scene. I am trying create the code regarding the score in the EnemySpawner. Here is the code I am trying to use:
void Update () {
if (enemyPrefab == null) {
score += 1;
}
}
The score simply doesn’t increase. Is it something to do with the fact that the enemy object is a prefab and doesn’t appear in the scene until the spawner Instantiates it?
score handling should be preferably done with a separate gamemanager class (usually a singleton). Whenever you destroy the enemy, broadcast an event. The game manager should subscribe for this event and when triggered should increase the score by one.
Make a script on the enemy and when you call destroy, send a message to the player to add to the score, try something like this.
C#
float Health;
GameObject Player;
void Start()
{
Player = GameObject.FindObjectWithTag("Player");
Health = 100;
}
void Update()
{
if( Health <= 0)
{
DES();
}
}
void DES()
{
Player.SendMessage("AddScore", SendMessageOptions.DontRequireReceiver);
Destroy( gameObject);
}
And then in your player’s script just add a function
int Score;
void AddScore()
{
Score += 1;
}