Making non-gui progress bar
Hi. I made a progress bar above a moving object (can move and rotate). I didn't want to use any GUI functions so just added 2 gameobjects with sprite renderer in each one (1 for progress bar full sprite and one for empty), as childs to the moving object (above it). And so I made this script attached to the progress bar full gameobject:
public Renderer renderer; //Here I inserted the sprite renderer of the progress bar full object
public float originalValue; //previus bounds.min.x
public float newValue; //current bounds.min.x
public float difference; //difference between the current and previus
public float scaleX; // localscale x
public bool progressing; // a bool that decides if the progress bar start to fill or empty
void Update()
{
if (progressing)
{
Progress_Plus();
}
else
{
Progress_Minus();
}
}
void Progress_Plus()
{
scaleX = transform.localScale.x;
originalValue = renderer.bounds.min.x;
if (scaleX < 0.24f)
{
scaleX += 0.001f;
if (float.IsPositiveInfinity(scaleX))
{
scaleX = float.MaxValue;
}
else if (float.IsNegativeInfinity(scaleX))
{
scaleX = float.MinValue;
}
transform.localScale = new Vector2(scaleX, transform.localScale.y);
newValue = renderer.bounds.min.x;
difference = newValue - originalValue;
transform.Translate(new Vector3(-difference, 0f, 0f));
}
else if (scaleX > 0.24f)
{
scaleX = 0.24f;
transform.localScale = new Vector2(scaleX, transform.localScale.y);
newValue = renderer.bounds.min.x;
difference = newValue - originalValue;
transform.Translate(new Vector3(-difference, 0f, 0f));
scaleX = 0.24f;
}
}
void Progress_Minus()
{
scaleX = transform.localScale.x;
originalValue = renderer.bounds.min.x;
if (scaleX > 0f)
{
scaleX -= 0.001f;
if (float.IsPositiveInfinity(scaleX))
{
scaleX = float.MaxValue;
}
else if (float.IsNegativeInfinity(scaleX))
{
scaleX = float.MinValue;
}
transform.localScale = new Vector2(scaleX, transform.localScale.y);
newValue = renderer.bounds.min.x;
difference = newValue - originalValue;
transform.Translate(new Vector3(-difference, 0f, 0f));
}
else if (scaleX < 0)
{
scaleX = 0;
transform.localScale = new Vector2(scaleX, transform.localScale.y);
newValue = renderer.bounds.min.x;
difference = newValue - originalValue;
transform.Translate(new Vector3(-difference, 0f, 0f));
scaleX = 0;
}
}
This code works fine if the object's (the parent of the 2 objects that have sprite renderer on) rotation is 0, BUT if the rotation goes higher of a point (90 degrees is when you can observe the most visual change problem) the progress bar starts going out of bounds ( you can see that progress bar full's spite doesn't start the same position as progress bar empty's position. Do you know what may be causing the problem? or a way to fix it?
Your answer
![](https://koobas.hobune.stream/wayback/20220612042105im_/https://answers.unity.com/themes/thub/images/avi.jpg)