将滑动数字实现到Unity中

时间:2017-03-25 15:29:40

标签: c# unity3d

我和那里的一些敌人进行了一场小小的roguelike比赛。当他们打我的时候,我放松了一些健康。我通过称之为“众所周知的标准”方法来实现这一目标。

    public void ChangeHealth(float healthToAdd) // Add or subtract health
{
    healthData.CurrentHealth = Mathf.Clamp(healthData.CurrentHealth + healthToAdd, 0, healthData.MaxHealth); // Change the current health
    healthView.UpdateHealthBar(healthData); // update the GUI
    if (healthData.CurrentHealth <= 0) // Kill the player at 0 health
        Destroy(gameObject);
}

因此,当我健康状况不佳时,会立即发生这种情况。现在我想让它一步一步地平稳地增加/减少。

我在这里找到了这个代码,用于滑动数字

float animationTime = 1; // The duration
float desiredNumber; // The calculated result
float initialNumber; 
float currentNumber; // The current value 

void AddToNumber(float value) // Change the Health
{
    initialNumber = currentNumber;
    desiredNumber += value;
}

private void Update()
{
    if (currentNumber != desiredNumber) // Create the sliding process
    {
        if (initialNumber < desiredNumber)
        {
            currentNumber += (animationTime * Time.deltaTime) * (desiredNumber - initialNumber);
            if (currentNumber >= desiredNumber)
            {
                currentNumber = desiredNumber;
            }
        }
        else
        {
            currentNumber -= (animationTime * Time.deltaTime) * (initialNumber - desiredNumber);
            if (currentNumber <= desiredNumber)
            {
                currentNumber = desiredNumber;
            }
        }

        Debug.Log(currentNumber); // Update the GUI ..
    }
}

问题是,我真的不知道如何将它用于我的代码或如何将其添加到我的代码中。是否可以通过这种方式更改我以前的代码,它是否使用滑动计算?

如果有人可以帮助我,那真是太棒了。

1 个答案:

答案 0 :(得分:1)

首先,我建议使用Coroutines。如果在Update中运行代码,则会计算每帧。如果您使用Coroutines,您可以选择它们何时开始以及何时结束。您可以在此处找到一些信息:https://docs.unity3d.com/Manual/Coroutines.html

IEnumerator HealthFade()
{
float time = 1f; // one second
float currentTime = 0f; // the time passed 
while(currentTime < time)
{
healthbar.fillamount = Mathf.Lerp(0f,100f,currentTime/time); // 0f = 0% hp 1f = 100% Hp, currentTime/time  give you a number between 0 and 1  = the amount of health you want to put inside the bar.
currentTime += Time.deltaTime;
yield return null;
}
}

如果这是您正在寻找的行为,请告诉我。