Adding score to existing code

I would like to add a simple score counter to my code my issue is I have tried all other methods of doing this and it just doesn’t seem to want to work .

Can anyone help me?

Here is the code I want to add the score counter to:

using UnityEngine;
using System.Collections;

public class DamagableObject : MonoBehaviour {

public bool m_Invincible = false;
public float m_MaxHealth = 100f;

[SerializeField]
public float m_Health = 100f;


public DecayingObject m_DeathEffectPrefab;
public DecayingObject m_RemainsPrefab;
public string m_DeathAnimation;

/*public virtual float health
{
	set
	{
		if (!m_Invincible ||  m_Health < value)
		{
			m_Health = value;
		}
		if (m_Health <= 0)
		{
			Death();
		}
		else if (m_Health > m_MaxHealth)
		{
			m_Health = m_MaxHealth;
		}
	}
	
	get
	{
		return m_Health;
	}
}*/

public virtual void DealDamage(float val, Vector3 pos, Vector3 normal)
{
	if (val > 0f && !m_Invincible)
	{
		m_Health -= val;
		if (m_Health <= 0)
		{
			Death();
		}
	}
}

	

public virtual void Heal(float val)
{
	if (val > 0f)
	{
		m_Health += val;
		if (m_Health > m_MaxHealth)
		{
			m_Health = m_MaxHealth;
		}
	}
}

public float GetHealth()
{
	return m_Health;
}

protected void Start() {
	bool error = false;
	if (m_MaxHealth <= 0)
	{
		Debug.LogError("Max health can't be less than or equal to 0");
		error = true;
	}
	if (m_Health > m_MaxHealth || m_Health <= 0)
	{
		Debug.LogError("Invalid health range expected 0-" + m_MaxHealth + " got " + m_Health);
		error = true;
	}
	if (error)
	{
		Debug.Break();
	}
}	



protected void Death()
{
	if (m_DeathEffectPrefab != null)
	{
		Instantiate(m_DeathEffectPrefab, transform.position, transform.rotation);
	}
	if (animation != null && animation[m_DeathAnimation] != null)
	{
		animation.CrossFade(m_DeathAnimation, 0.5f, PlayMode.StopAll);
		if (m_RemainsPrefab != null)
		{
			StartCoroutine("WaitForDeathAnimation", animation[m_DeathAnimation].length);
		}
	}
	else
	{
		if (m_RemainsPrefab != null)
		{
			Instantiate(m_RemainsPrefab, transform.position, transform.rotation);
		}
		Destroy(gameObject);
	}
}

protected IEnumerator WaitForDeathAnimation(float time)
{
	yield return new WaitForSeconds(time);
	Instantiate(m_RemainsPrefab, transform.position, transform.rotation);
	Destroy(gameObject);
}
public Texture2D background = null;
public Texture2D healthbar = null;


void OnGUI()
{
	//Draw Background
	
	GUI.DrawTexture(new Rect(25.0f,25.0f,120.0f,14.0f),background);
	
	//Draw Healthbar
	GUI.BeginGroup(new Rect(30.0f,30.0f,115.0f *(m_MaxHealth / m_Health),15.0f));
	GUI.DrawTexture(new Rect(0.0f,0.0f,120.0f,10.0f),healthbar);
	GUI.EndGroup();
    
	   
	               
}
	
void Update()
{						
	
}

}

Given that you don't specify HOW you intend to actually create your score feedback, I can only tell you that you can easily do that in

OnGUI

for example with a very very simple

GUILayout.Label("My score " + score);

where score is your score variable of course, set and updated elsewhere, naturally.

To acually hold the score information, you usually need to keep a 'game master' object in your scene, that basically has a function you call whenever score is earned.

Additionally, a more versatile but slightly harder approach is to use what are called 'singletons', which correspond to static classes in c#. Those classes have project wide, one instance variables, that can be dereferenced from anywhere on the project.

Supposing you have a static class like this:

using UnityEngine;
using System.Collections;

public static class mygamemaster {  //note how it doesn't derive from monobehavior
  public static int myscore = 0;
  public static string myplayername = "Player";
}

in any of your code you can just write

mygamemaster.myscore = 5;

and it'll work as intended.

What I was looking for and sorry for not explaining it in more detail was the score to display based on the the destroy of the gameObject and increase by 10 as each enemy is destroyed.

Need code formatting for this so I’m making it a new reply (note: UNTESTED CODE):
Your

if(Death()) { Scoring.m_score += 1; } 

it’s the right approach but it’s a bit flawed. What you need is a FUNCTION to call in your scorekeeping script.

using UnityEngine;
using System.Collections;

public class mygamemaster : MonoBehavior {
  public static int myscore = 0;
  public static string myplayername = "Player";

  public void increasepoints(int increase) {
    myscore += increase;
  }

  void OnGUI() {
    GUILayout.Label(myplayername + " score " + myscore);
  }
}

then, whenever you need to increase your score, from another class

GameObject gamemasterobject;
gamemasterobject = GameObject.Find("gamemaster") //you need a gameobject called gamemaster in your scene for this to work, with the mygamemaster class attached
gamemasterclass = gamemasterobject .GetComponent<mygamemaster>();
gamemasterclass.increasepoints(1);