HowTo pass variable to OnGUI
I have a huge problem which i can solve since 4 days now. I have to say that im very new to unity and C+
My Problem is that i can not access a variable set on a public function on the same script. They are like 2 different values for the same variable.
I have 2 scripts. HealthBarMonster calls the ShowScore script and passes the score value when a GameObject gets destroyed. But i can not access the variable set in CalculateScore with my onGUI function. What i am doing wrong, thank you for any help i get
HealthBarMonster
using UnityEngine;
using System.Collections;
public class HealthBarMonster : MonoBehaviour {
public float MaxHhealth = 100f;
public float CurrentHealth = 0f;
public int Score = 10;
public GameObject healthBar;
public Tower Tower;
public ShowScore ShowScore;
// Use this for initialization
void Start () {
CurrentHealth = MaxHhealth;
}
public void decreasehealth(float dmg){
CurrentHealth -= dmg;
float calc_health = CurrentHealth / MaxHhealth;
SetHealthBar (calc_health);
}
public void SetHealthBar(float health){
healthBar.transform.localScale = new Vector3 (Mathf.Clamp (health, 0f, 1f), healthBar.transform.localScale.y, healthBar.transform.localScale.z);
if (CurrentHealth <= 0) {
Tower.DeathReport ();
ShowScore.CalculateScore (Score);
Destroy (gameObject);
}
}
}
ShowScore
using UnityEngine;
using System.Collections;
public class ShowScore : MonoBehaviour {
private int ScoreCount = 0;
private int ScoreCountGUI = 0;
public void CalculateScore (int score){
if (score != 0) {
ScoreCount += score;
} else {
ScoreCountGUI = ScoreCount;
}
}
public void OnGUI()
{
CalculateScore (0);
int w = Screen.width, h = Screen.height;
GUIStyle style = new GUIStyle();
Rect rect = new Rect(0, 10, w, h * 2 / 100);
style.alignment = TextAnchor.UpperLeft;
style.fontSize = h * 2 / 100;
style.normal.textColor = new Color (0.0f, 0.0f, 0.5f, 1.0f);
GUI.Label(rect, "Score: "+ScoreCountGUI, style);
}
}
I know the ScoreCount variable in the if condition "!= 0" goes up right. but in the else condition it is not the same value
Answer by seevenup · Feb 11, 2016 at 03:17 PM
Wow i have found an answer on the internet after the 10 google side. the keyword was static here my change code, so if some one has the same problem,
using UnityEngine;
using System.Collections;
public class ShowScore : MonoBehaviour {
static int ScoreCount;
public void CalculateScore (int ScoreReport){
ScoreCount += ScoreReport;
}
public void OnGUI()
{
int w = Screen.width, h = Screen.height;
GUIStyle style = new GUIStyle();
Rect rect = new Rect(0, 10, w, h * 2 / 100);
style.alignment = TextAnchor.UpperLeft;
style.fontSize = h * 2 / 100;
style.normal.textColor = new Color (0.0f, 0.0f, 0.5f, 1.0f);
GUI.Label(rect, "Score: "+ScoreCount, style);
}
}
Your answer
Follow this Question
Related Questions
Trying to give instantiated object a value 0 Answers
If statement noop :) 1 Answer
I can't change an int from an other class 0 Answers
OnPointerExit getting called when you click on a gameObject with the interface implemented. 0 Answers
In Unity, how do I make objects restart a player upon contact? 1 Answer