- Home /
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()
{
}
}
Answer by roamcel · Jan 10, 2012 at 09:46 PM
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.
Thank you I will give that a shot and see what comes out from it
I tried this and it works for one enemy and I am trying to Update it but it is just not working. I've tried doing Scoring.m_score ++;
but that just updates it all the time and I just want it to update when the death function is called again so I tried:
Update() { if(Death()) { Scoring.m_score += 1; } }
If I am doing something wrong can you or someone help me with this?
Answer by Matt 5 · Jan 10, 2012 at 09:52 PM
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.
you usually add your notes as comments rather than replies, since these last ones from your part make the question harder to understand. I've updated my reply with more info on the subject.
Answer by roamcel · Jan 12, 2012 at 06:47 AM
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);
This code works amazing but now I want to apply a texture that the score will display on now I've tried GUI.DrawTexture(Rect 100, 25, 100, 30), "texture name");
but that keeps co$$anonymous$$g up with errors, I've also tried GUI.DrawTexture(new Rect(100, 25, 100, 30),Scoring.m_score.ToString(),"texture name"); as well as
GUI.Label(new Rect(100, 25, 100, 30),Scoring.m_score.ToString(), "texture name");
Your answer
![](https://koobas.hobune.stream/wayback/20220613062841im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Need help with basic magic system 0 Answers
Impact Force Gui 0 Answers
Make a custom score counter in unity with c# 1 Answer
Score Counter Help 2 Answers
Scoresystem wont function correctly 0 Answers