我和那里的一些敌人进行了一场小小的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 ..
}
}
问题是,我真的不知道如何将它用于我的代码或如何将其添加到我的代码中。是否可以通过这种方式更改我以前的代码,它是否使用滑动计算?
如果有人可以帮助我,那真是太棒了。
答案 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;
}
}
如果这是您正在寻找的行为,请告诉我。