My HUD is not displaying current values.
So I have developed a hunger, thirst, and health system and I want to display it on my current HUD I used an image for the fill method and tried to develop a script to make it display onto the HUD but it doesn't seem to display onto the HUD.
here is the code to the System:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SurvivalUIControl : MonoBehaviour
{
//variables
public float maxHealth, maxThirst, maxHunger;
public float thirstIncreaseRate, hungerIncreaseRate, deadIncreaseRate;
public float currentHealth, currentThirst, currentHunger;
public bool playerDead;
//functions
public void Start()
{
currentHealth = maxHealth;
currentThirst = maxThirst;
currentHunger = maxHunger;
}
public void Update()
{
//thirst and hunger
if (!playerDead)
{
currentHunger -= hungerIncreaseRate * Time.deltaTime;
currentThirst -= thirstIncreaseRate * Time.deltaTime;
}
if (currentThirst <= 0)
{
currentHealth -= deadIncreaseRate * Time.deltaTime;
print("Player is Thirsty!");
currentThirst = 0;
}
if (currentHunger <= 0)
{
currentHealth -= deadIncreaseRate * Time.deltaTime;
print("Player is Starving!");
currentHunger = 0;
}
if(currentHealth < 0)
{
Die();
currentHealth = 0;
}
}
public void Die()
{
playerDead = true;
print("player has Died!");
}
}
And here is the code to the HUD:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SurvivalHUDController : MonoBehaviour
{
public Image health;
public Image stamina;
public Image hunger;
public Image thirst;
public SurvivalUIControl survivalControl;
public void Update()
{
health.fillAmount = survivalControl.currentHealth;
hunger.fillAmount = survivalControl.currentHunger;
thirst.fillAmount = survivalControl.currentThirst;
}
}
Answer by asafsitner · Mar 14 at 05:48 PM
fillAmount
takes a normalized value (between 0 and 1).
In your case, you would either make sure that .currentHealth
etc. are always normalized, or (which is probably easier to manage) normalized them yourself when you plug them into the .fillAmount
parameter, like so (in the SurvivalHUDController
script):
public void Update()
{
health.fillAmount = survivalControl.currentHealth / survivalControl.maxHealth;
hunger.fillAmount = survivalControl.currentHunger / survivalControl.maxHunger;
thirst.fillAmount = survivalControl.currentThirst / survivalControl.maxThirst;
}
You can also add a Mathf.Clamp01 call to make sure the values don't go out of the 0-1 range (e.g. health.fillAmount = Mathf.Clamp01(survivalControl.currentHealth / survivalControl.maxHealth
)