- Home /
how to set a max health and mana
kinda new to coding thought I did it right but guess not so whats currently happening is if I go below 0 will go to -10 then snap back to 0 but visually looks bad seeing -10 for a second. other problem is when the regen is occurring it regens to 101% instead of 100%. ive tried moving where I call the
if (currentMana > maxMana) currentMana = maxMana; in void update and void start and similar result.
using UnityEngine.UI;
public class DamageScript : MonoBehaviour { public float currentHealth = 100f; public float maxHealth = 100f; public float damage = 20f; public Image currentHealthBar; public Text HealthratioText; public Image currentManaBar; public Text ManaRatioText; public float currentMana = 100f; public float maxMana = 100f; public float minMana=0f; public float drainMana = 10f; private float t = 0.0f; private float threshold = 1.0f;
void Start()
{
currentHealth = maxHealth;
currentMana = maxMana;
UpdateHealthbar ();
UpdateManabar ();
}
public void UpdateManabar()
{
float ratio = currentMana / maxMana;
currentManaBar.rectTransform.localScale = new Vector3 (ratio, 1, 1);
ManaRatioText.text = (ratio * 100).ToString ("0") + '%';
if (currentMana > maxMana)
currentMana = maxMana;
if (currentMana < minMana)
currentMana = minMana;
}
public void UpdateHealthbar()
{
float ratio = currentHealth / maxHealth;
currentHealthBar.rectTransform.localScale = new Vector3 (ratio, 1, 1);
HealthratioText.text = (ratio * 100).ToString ("0") + '%';
}
void OnCollisionEnter (Collision col)
{
if (col.transform.tag == "Bullet") {
currentHealth -= damage;
print ("hurt" + currentHealth);
if (currentHealth <= 0)
Destroy (gameObject);
UpdateHealthbar ();
}
else if (col.transform.tag == "Enemy") {
currentHealth -= damage;
print ("hurt" + currentHealth);
if (currentHealth <= 0)
Destroy (gameObject);
UpdateHealthbar ();
}
}
void Update ()
{
t += Time.deltaTime;
if (t >= threshold) {
t = 0.0f;
currentMana++;
UpdateManabar ();
}
if (Input.GetKeyDown (KeyCode.LeftShift))
{
currentMana -= drainMana;
print ("manaDrain" + currentMana);
UpdateManabar ();
}
}
}
Answer by hexagonius · Sep 26, 2017 at 05:00 AM
That's because you're calculating the ratio before you do your bounds checks. Which can be done this way:
currentMana = Mathf.Clamp(currentMana, minMana, maxMana);
Thanks worked great :D saved me some time thought I was just putting it in the wrong void or something.
Your answer
Follow this Question
Related Questions
Mouse look X axis not working? 0 Answers
mathf.min and mathf.max 3 Answers
Maximum Rotation 1 Answer
How would I find multiple peaks and valleys in an array of values? 1 Answer
Maximum Rotation 2 Answers