我正在尝试为游戏中的角色制作一个健康条,并且希望将其分成多个较小的条。
我整个上午都在努力,但是不知怎么做。 这是我到目前为止编写的代码:
/// <summary>
/// UI list for the health bars
/// </summary>
[SerializeField] private List<Slider> healthBars = null;
/// <summary>
/// The health of the boss
/// </summary>
[SerializeField] private Enemy bossLife = null;
private void Awake()
{
InitializeUI();
}
private void LateUpdate()
{
UpdateBossUI();
}
// WIP
private void InitializeUI()
{
int _maxBossHealth = bossLife.maxHealth;
int _totalHeathBars = healthBars.Count;
float _barMaxVal = _maxBossHealth / _totalHeathBars;
for (int i = 0; i < _totalHeathBars; i++)
{
healthBars[i].value = healthBars[i].maxValue = _barMaxVal;
}
lastHealth = _maxBossHealth;
}
private void UpdateBossUI()
{
// Be sure to not update the UI every frame but only if needed
int _currBossHealth = bossLife.CurrentHealth;
if (lastHealth == _currBossHealth)
return;
// Remember when the UI was updated
lastHealth = _currBossHealth;
int _maxBossHealth = bossLife.maxHealth;
int _totalHeathBars = healthBars.Count;
float _barMaxVal = _maxBossHealth / _totalHeathBars;
for (int i = 0; i < _totalHeathBars; i++)
{
if (_currBossHealth > _maxBossHealth - _barMaxVal * (i + 1)
&& _currBossHealth <= _maxBossHealth - _barMaxVal * i)
{
healthBars[i].value = ((_maxBossHealth - (_maxBossHealth / _totalHeathBars)) - _currBossHealth) * -1;
}
}
}
有人可以帮我一下吗? 谢谢
答案 0 :(得分:1)
我将您的上一个for
循环更改为此:
for (int i = 0; i < _totalHeathBars; i++)
{
if (_currBossHealth >= (i + 1) * _barMaxVal) // health greater than current bar => full bar
healthBars[i].value = _barMaxVal;
else if (_currBossHealth < i * _barMaxVal) // health less than current bar => empty bar
healthBars[i].value = 0;
else // health inside current bar
healthBars[i].value = _currBossHealth % _barMaxVal;
}