I imagine it's because I didn't tell it through code which direction I want it draining from, but I thought that was already obvious to unity since that's the setting I have on the GUI Image Type in the hierarchy is filled and the Fill Origin is set to left. Regardless, I assume that something in my code is telling it to drain from both sides maybe?? my life bars are draining from both sides but I only want it draining from the left. Does anyone have any solutions?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class meterDrain : MonoBehaviour {
public float maxHungerMeter = 100f;
public float curHungerMeter;
public RectTransform hungerMeter;
public float maxThirstMeter = 100f;
public float curThirstMeter;
public RectTransform thirstMeter;
public float maxEnergyMeter = 100f;
public float curEnergyMeter;
public RectTransform EnergyMeter;
public float maxBowelsMeter = 100f;
public float curBowelsMeter;
public RectTransform bowelsMeter;
public float maxMoraleMeter = 100f;
public float curMoraleMeter;
public RectTransform moraleMeter;
void Start ()
{
curHungerMeter = maxHungerMeter;
curThirstMeter = maxThirstMeter;
curEnergyMeter = maxEnergyMeter;
curBowelsMeter = maxBowelsMeter;
curMoraleMeter = maxMoraleMeter;
}
// Update is called once per frame
void Update ()
{
TakeDamage ();
}
void TakeDamage(float amount = 10f){ //as of now the meters are being drained towards the middle from both sides. need to fix that
{
curHungerMeter -= amount * Time.deltaTime;
curThirstMeter -= amount * Time.deltaTime;
curEnergyMeter -= amount * Time.deltaTime;
curBowelsMeter -= amount * Time.deltaTime;
curMoraleMeter -= amount * Time.deltaTime;
}
if (hungerMeter == null) //for some reason, this is being applied all meters besides hunger, even though i didn't tell it to. *shrugs* works for me.
return;
hungerMeter.sizeDelta = new Vector2 (curHungerMeter, hungerMeter.sizeDelta.y);
thirstMeter.sizeDelta = new Vector2 (curHungerMeter, thirstMeter.sizeDelta.y);
EnergyMeter.sizeDelta = new Vector2 (curHungerMeter, EnergyMeter.sizeDelta.y);
bowelsMeter.sizeDelta = new Vector2 (curHungerMeter, bowelsMeter.sizeDelta.y);
moraleMeter.sizeDelta = new Vector2 (curHungerMeter, moraleMeter.sizeDelta.y);
}
}
//The edited script that now works...
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class meterDrain : MonoBehaviour {
private float drainTime = 10f;
private float maxHungerMeter = 100f;
public float curHungerMeter;
public Image hungerMeter;
private float maxThirstMeter = 100f;
public float curThirstMeter;
public Image thirstMeter;
private float maxEnergyMeter = 100f;
public float curEnergyMeter;
public Image energyMeter;
private float maxBowelsMeter = 100f;
public float curBowelsMeter;
public Image bowelsMeter;
private float maxMoraleMeter = 100f;
public float curMoraleMeter;
public Image moraleMeter;
void Start ()
{
curHungerMeter = maxHungerMeter;
curThirstMeter = maxThirstMeter;
curEnergyMeter = maxEnergyMeter;
curBowelsMeter = maxBowelsMeter;
curMoraleMeter = maxMoraleMeter;
}
// Update is called once per frame
void Update ()
{
TakeDamage ();
}
void TakeDamage(float amount = 10f){
{
curHungerMeter -= amount * Time.deltaTime;
curThirstMeter -= amount * Time.deltaTime;
curEnergyMeter -= amount * Time.deltaTime;
curBowelsMeter -= amount * Time.deltaTime;
curMoraleMeter -= amount * Time.deltaTime;
}
if (hungerMeter == null) {
return;
}
else
{
hungerMeter.fillAmount -= 1.0f / drainTime * Time.deltaTime;
}
if (thirstMeter == null) {
return;
}
else
{
thirstMeter.fillAmount -= 1.0f / drainTime * Time.deltaTime;
}
if (energyMeter == null){
return;
}
else
{
energyMeter.fillAmount -= 1.0f / drainTime * Time.deltaTime;
}
if (bowelsMeter == null){
return;
}
else
{
bowelsMeter.fillAmount -= 1.0f / drainTime * Time.deltaTime;
}
if (moraleMeter == null){
return;
}
else
{
moraleMeter.fillAmount -= 1.0f / drainTime * Time.deltaTime;
}
}
}
You're changing the size of your health bar by setting its RectTransform, instead you want to change the Image component's Fill Amount. For this to work you'll need to change the type of your meter objects (hungerMeter etc.) to type Image.