游戏人物分身健康栏计算

问题描述 投票:0回答:1

我想为一个游戏中的角色做一个健康栏,我想把它分成多个小栏。

我忙活了一上午,但不知怎么就想不出来了,这是我到现在做的代码。

    /// <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;
            }
        }
    }

谁能帮我个忙,谢谢

c# unity3d user-interface unityscript
1个回答
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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.