Вы можете сделать это, Lerping localPosition вашей вертикальной чертой.
Это будет выглядеть примерно так:
GameObject verticalBar; //the gameobject you want to use
GameObject player; //Assume this is your play that has the health property
Vector3 startPos; //start position of your total healthbar
Vector3 endPos; //end position of your total healthbar
private void UpdateVerticalBarPosition()
{
float normalized = player.currentHealth / player. maxHealth //this normalizes your current health to be between 0 and 1
if(!float IsNaN(normalized))//(optional) makes sure the value is valid.
{
verticalBar.transform.localPosition = Vector3.Lerp(startPos, endPos, normalized);
}
}
Этот метод нормализует ваш текущий HP.Это означает, что если, например, у вашего игрока осталось 70 единиц здоровья из 100 единиц здоровья, нормализованное значение будет равно 0.7f
, или 70% его общего здоровья.
Используя это нормализованное значение в Vector3.Lerp
,находится между startPos
и endPos
(здесь startPos
будет начальной позицией вашей общей шкалы здоровья, поэтому левая сторона вашей серой панели. И endPos
конечная позиция вашей общей шкалы здоровья, поэтому праваясторона вашей серой полосы) поместит вертикальную полосу на 70% вдоль полосы здоровья.Это должно быть той же точкой, где ваша желтая / оранжевая полоса останавливается.
Если вы вызовете этот метод один раз, когда hp изменился, он перейдет к новому значению.Но если вы постепенно получаете урон, вы также можете запустить его в цикле, чтобы он плавно скользил по нему.
В качестве альтернативы.Если вы используете компонент Slider
Unity для своей панели здоровья, вы также можете просто использовать Slider.handleRect
.находится в документации здесь , которая будет выглядеть примерно так
Slider healthBar; //the slider used for your healthbar
GameObject verticalBar; // the bar you want displayed at the end of the healthbar
Start()
{
healthBar.handleRect = verticalBar;
}