Implementing Scoring System

Hello there! I am pretty new to Unity and have been learning and using different tutorials on the web and youtube and reading a lot of advice here too. I wish to implement a scoring system. I know how to add a GUI Text but had no luck using different scripts to increase it. As of this moment the Player who touches any enemies on the screen are destroyed on collision. So when enemies are destroyed would like a score.

Here are the scripts. Playerscripts controls movement of player and collisions. Enemy scripts controls the weapons and lifetime of enemy on screen. Healthscript is self explanatory. Hope some one can help! Thanks

using UnityEngine;

/// <summary>
/// Player controller and behavior
/// </summary>
public class PlayerScript : MonoBehaviour
{
	void OnDestroy()
	{
		// Game Over.
		// Add the script to the parent because the current game
		// object is likely going to be destroyed immediately.
		transform.parent.gameObject.AddComponent<GameOverScript>();
	}


	/// <summary>
	/// 1 - The speed of the ship
	/// </summary>
	public Vector2 speed = new Vector2(50, 50);
	
	// 2 - Store the movement
	private Vector2 movement;
	
	void Update()
	{
		// ...
		
		// 6 - Make sure we are not outside the camera bounds
		var dist = (transform.position - Camera.main.transform.position).z;
		
		var leftBorder = Camera.main.ViewportToWorldPoint(
			new Vector3(0, 0, dist)
			).x;
		
		var rightBorder = Camera.main.ViewportToWorldPoint(
			new Vector3(1, 0, dist)
			).x;
		
		var topBorder = Camera.main.ViewportToWorldPoint(
			new Vector3(0, 0, dist)
			).y;
		
		var bottomBorder = Camera.main.ViewportToWorldPoint(
			new Vector3(0, 2, dist)
			).y;
		
		transform.position = new Vector3(
			Mathf.Clamp(transform.position.x, leftBorder, rightBorder),
			Mathf.Clamp(transform.position.y, topBorder, bottomBorder),
			transform.position.z
			);
		
		// End of the update method

		// 3 - Retrieve axis information
		float inputX = Input.GetAxis("Horizontal");
		float inputY = Input.GetAxis("Vertical");
		
		// 4 - Movement per direction
		movement = new Vector2(
			speed.x * inputX,
			speed.y * inputY);
		
	}
	
	void FixedUpdate()
	{
				// 5 - Move the game object
				rigidbody2D.velocity = movement;
	}

	void OnCollisionEnter2D(Collision2D collision)
		{
			bool damagePlayer = false;
			
			// Collision with enemy
			EnemyScript enemy = collision.gameObject.GetComponent<EnemyScript>();
			if (enemy != null)
			{
				// Kill the enemy
				HealthScript enemyHealth = enemy.GetComponent<HealthScript>();
				if (enemyHealth != null) enemyHealth.Damage(enemyHealth.hp);

		
				damagePlayer = true;
			}


			// Damage the player
			if (damagePlayer)
			{
				HealthScript playerHealth = this.GetComponent<HealthScript>();
				if (playerHealth != null) playerHealth.Damage(0);


		}


     }

}

using UnityEngine;
/// <summary>
/// Handle hitpoints and damages
/// </summary>
public class HealthScript : MonoBehaviour
{

	/// <summary>
	/// Total hitpoints
	/// </summary>
	public int hp = 1;
	
	/// <summary>
	/// Enemy or player?
	/// </summary>
	public bool isEnemy = true;
	
	/// <summary>
	/// Inflicts damage and check if the object should be destroyed
	/// </summary>
	/// <param name="damageCount"></param>
	public void Damage(int damageCount)

	{
		hp -= damageCount;
		
		if (hp <= 0)


		{
			// 'Splosion!
			SpecialEffectsHelper.Instance.Explosion(transform.position);
			// Dead!
			SoundEffectsHelper.Instance.MakeExplosionSound();
			Destroy(gameObject);

		
		}
	}
	void OnTriggerEnter2D(Collider2D otherCollider)
	{
		// Is this a shot?
		ShotScript shot = otherCollider.gameObject.GetComponent<ShotScript>();
		if (shot != null)
		{
			// Avoid friendly fire
			if (shot.isEnemyShot != isEnemy)
			{
				Damage(shot.damage);
				
				// Destroy the shot
				Destroy(shot.gameObject);

				// Remember to always target the game object, otherwise you will just remove the script
			}
		}
	}
}

using UnityEngine;

/// <summary>
/// Enemy generic behavior
/// </summary>
public class EnemyScript : MonoBehaviour
{
	private bool hasSpawn;
	private MoveScript moveScript;
	private WeaponScript[] weapons;
	
	void Awake()
	{
		// Retrieve the weapon only once
		weapons = GetComponentsInChildren<WeaponScript>();
		
		// Retrieve scripts to disable when not spawn
		moveScript = GetComponent<MoveScript>();
	}
	
	// 1 - Disable everything
	void Start()
	{
		hasSpawn = false;
		
		// Disable everything
		// -- collider
		collider2D.enabled = false;
		// -- Moving
		moveScript.enabled = false;
		// -- Shooting
		foreach (WeaponScript weapon in weapons)
		{
			weapon.enabled = false;
		}
	}
	
	void Update()
	{
		// 2 - Check if the enemy has spawned.
		if (hasSpawn == false)
		{
			if (renderer.IsVisibleFrom(Camera.main))
			{
				Spawn();
			}
		}
		else
		{
			// Auto-fire
			foreach (WeaponScript weapon in weapons)
			{
				if (weapon != null && weapon.enabled && weapon.CanAttack)
				{
					weapon.Attack(true);
					SoundEffectsHelper.Instance.MakeEnemyShotSound(); 
				}
			}
			
			// 4 - Out of the camera ? Destroy the game object.
			if (renderer.IsVisibleFrom(Camera.main) == false)
			{
				Destroy(gameObject);
			}
		}
	}
	
	// 3 - Activate itself.
	private void Spawn()
	{
		hasSpawn = true;
		
		// Enable everything
		// -- Collider
		collider2D.enabled = true;
		// -- Moving
		moveScript.enabled = true;
		// -- Shooting
		foreach (WeaponScript weapon in weapons)
		{
			weapon.enabled = true;
		}
	}
}

First, Please don’t put all your script like that when asking a question. Just post what is necessary.

To make a score, create a public score variable somewhere in your game. You could put it in your character controls if you never delete it. Then, to add score when an ennemy die, you simply add score when you delete the gameobject.

Here’s an example if you decide to add it in your controls :

In your controls scripts :

 public int score = 0;

Then in your ennemy script :

OnDestroy() {
   myCharacterScript.score += 10;
}

Never mind I have successfully implemented a bare bones scoring system which is not pretty as it uses the Unity GUI box. But hey does thejob!