我想为一个游戏中的角色做一个健康栏,我想把它分成多个小栏。
我忙活了一上午,但不知怎么就想不出来了,这是我到现在做的代码。
/// <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;
}
}
}
谁能帮我个忙,谢谢
我会把你的最后一句话改成 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;
}