Hunger Script Help
I have some trouble here on my hunger script. So here is the script:
public int playerMaxHunger;
public int playerCurrentHunger;
public int damageToGive;
// Use this for initialization
void Start () {
playerCurrentHunger = playerMaxHunger;
}
// Update is called once per frame
void Update () {
if(playerCurrentHunger < 1)
{
GetComponent<PlayerHealth>().HurtPlayer(damageToGive);
}
}
public void SetMaxHunger()
{
playerCurrentHunger = playerMaxHunger;
}
And here comes the problem, when the hunger reaches 0 the player health goes constantly down without stopping. I want that he goes down every 3 seconds. And that the hunger decreases every 10 seconds.
Any help please? I tried with InvokeRepeating, but nothing.
Answer by RakshithAnand · Apr 25, 2016 at 08:51 PM
Ok first of all I will optimize your code.. and use coroutines. Read about it by googling. But the below code should do what you want:
public int playerMaxHunger;
public int playerCurrentHunger;
public int damageToGive;
//cache the player health component
PlayerHealth playerHealth;
// Use this for initialization
void Start () {
playerCurrentHunger = playerMaxHunger;
playerHealth = GetComponent<PlayerHealth>();
StartCoroutine(CheckHunger());
StartCoroutine(DecreaseHunger());
}
IEnumerator CheckHunger()
{
// consider storing a variable to check if player is alive and do While(alive)
while(true)
{
if(currentHunger < 1)
{
playerHealth.HurtPlayer(damageToGive);
//store 3 in some variable and use it
yield return new WaitForSeconds(3);
}
else
{
// check every frame - or once in few seconds
yield return null;
}
}
}
IEnumerator DecreaseHunger()
{
while(playerCurrentHunger > 0)
{
yield return new WaitForSeconds(10);
//decrease currentHunger here
}
}
You would have to start the "DecreaseHunger" coroutine again once the player hunger goes below 1(where the coroutine exits) and his hunger value increases
Thanks so much for that, everything is working fine. I'm a little new to c# and i tried to make my scripts on my own without any help to become better, but i was stucked in this script. Thanks again.
Your answer
![](https://koobas.hobune.stream/wayback/20220612075616im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Canvas Slider Max Value / High Value Help 1 Answer
[SOLVED!] PlayerPrefabs SetFloat and GetFloat is not working 0 Answers
How to assign slider to float: Spin, on a gameobject 1 Answer
How to move an object's own Y position relative to a slider's Y position? 1 Answer
lerp a float value of keyup 2 Answers