- Home /
Constant decrease health value during collision c#
I'm trying to create a script which would decrease the health value constantly during collision with object Flare and stop the decrease immediately when the collision is over. I would like to have it with a constant speed(around 5-10 health per second, even better if it is adjustable with a public value(in my script that would be 'lowerlife')) and make it visible also on a GuiText counter. I managed to do something which is almost working but for some reason health continues to decrease even after the collision is over. I made health and lifelower public, so I can play with them easily. Here is my current code below:
public GUIText healthText;
public int health;
public float lifelower;
void Start () {
health = 100;
SetCountText ();
lifelower=0.2;
}
void OnTriggerEnter(Collider other){
if (other.gameObject.tag == "Flare") {
StartCoroutine("LowerHealth");
SetCountText();
}
}
void OnTriggerExit(Collider other){
if (other.gameObject.tag == "Flare") {
StopCoroutine ("LowerHealth");
SetCountText ();
}
}
IEnumerator LowerHealth() {
while (true) {
yield return new WaitForSeconds (lifelower);
health --;
SetCountText();
}
}
void SetCountText(){
healthText.text = "Health: " + health.ToString ();
if (health < 1)
gameoverText.text = "GAME OVER";
}
I would be very happy if someone could solve me why does the health value decrease continues after end of collision.
Answer by AlwaysSunny · Mar 11, 2015 at 05:12 PM
You're already using triggers; why not use
void OnTriggerStay() {}
and put all your health-decreasing logic within it?
edit: I see that you want to lose health only at certain intervals of time. I think if I were you, I'd just keep a timer variable:
private float timer = 0;
void OnTriggerStay() {
// if it's the right object...
timer += Time.deltaTime;
if (timer > lifelower) {
// diminish health & reset timer to zero
}
}
Your answer
Follow this Question
Related Questions
Collision of a constantly moving object 0 Answers
Reducing a value over time 2 Answers
How can i randomly increase/decrease a value over time? 1 Answer
Instantiating a prefab and values 1 Answer
Variable that decreases after a certain amount of time? 2 Answers