Расчет разделенной шкалы здоровья игрового персонажа - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь создать шкалу здоровья для персонажа в игре и хочу разделить ее на несколько меньших полос.

Я работал над этим все утро, но почему-то не могу понять как это сделать. Вот код, который я сделал до сих пор:

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

Кто-нибудь, пожалуйста, подайте мне руку помощи? Спасибо

1 Ответ

1 голос
/ 26 мая 2020

Я бы поменял ваш последний for l oop на это:

    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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...