- Home /
Question by
Taylord303 · Nov 05, 2012 at 08:53 PM ·
timerinvokeinvokerepeatinghealth
Subtract one from health every five seconds.
I have a script that invokes a function every five seconds where if the player is hungry, one point is subtracted from the player's health until it reaches zero, at which point, the player dies. However, I've been having a problem and can't seem to figure it out. Once the function is invoked, it doesn't happen every five seconds, instead it drains the player health to zero in about 1.5 seconds. I'll post the code below. Any help would be greatly appreciated.
using UnityEngine;
using System.Collections;
public class playerHunger : MonoBehaviour {
public int Hunger = 3;
public GUISkin customSkin;
public Texture HungerFull;
public Texture HungerHalf;
public Texture HungerOne;
public Game2_Player Deadbool;
public int HealthDeduction = 1;
// Use this for initialization
void Start () {
InvokeRepeating("HungerDecay", 480, 480.0f);
}
// Update is called once per frame
void Update () {
if(Hunger<=0){
Hunger=0;
}
if(Hunger==0){
Invoke("HungerDamage", 1);
}
if(Game2_Player.hp==0){
Game2_Player.dead = (true);
Time.timeScale = 0.0f;
}
}
void HungerDecay () {
Hunger--;
}
void OnGUI(){
GUI.skin=customSkin;
GUI.Label(new Rect(10,70,100,100), "Hunger:");
if(Hunger==3){
GUI.DrawTexture(new Rect(10,70,100,100), HungerFull, ScaleMode.ScaleToFit, true, 0);
}
if(Hunger==2){
GUI.DrawTexture(new Rect(10,70,100,100), HungerHalf, ScaleMode.ScaleToFit, true, 0);
}
if(Hunger==1){
GUI.DrawTexture(new Rect(10,70,100,100), HungerOne, ScaleMode.ScaleToFit, true, 0);
}
if(Hunger==0){
GUI.Label(new Rect(10,70,100,100), "Feed Me!");
}
}
void HungerDamage(){
if(Hunger==0){
Game2_Player.hp--;
}
}
}
Comment
Answer by Paulo-Henrique025 · Nov 05, 2012 at 09:06 PM
Try this:
void Start()
{
InvokeRepeating("DamagePlayer", 0, 5);
}
void DamagePlayer()
{
//TODO Dmg the player
}