#c# #unity3d #fill #lerp
#c# #unity3d #заполнить #lerp
Вопрос:
Пытаюсь отобразить объем заполнения изображения из этого скрипта.
public class ProgressBar : MonoBehaviour
{
public static int minimum;
public static int maximum;
public static int current;
public Image mask;
void Update()
{
GetCurrentFill();
}
void GetCurrentFill()
{
float currentOffset = current - minimum;
float maximumOffset = maximum - minimum;
float fillAmount = currentOffset / maximumOffset;
mask.fillAmount = fillAmount;
}
}
я собираюсь объяснить этот код :
Текущее = текущее значение, минимальное = минимальный опыт для повышения уровня, максимальное = максимальный опыт для повышения уровня
if(skortotal < 20)
{
playerlevel = 1;
ProgressBar.minimum = 0;
ProgressBar.current = skortotal;
ProgressBar.maximum = 20;
}
if(skortotal >= 20)
{
playerlevel = 2;
ProgressBar.current = skortotal;
ProgressBar.maximum = 50;
ProgressBar.minimum = 20;
}
}
код уже работает, но я не знаю, как заставить его работать с помощью lerp
Ответ №1:
Вы спросили, как добиться этого с помощью Mathf.Lerp, вот мое предложение:
mask.fillAmount = Mathf.Lerp(minimum, maximum, current) / maximum;
Lerp автоматически фиксирует значения, поэтому результат всегда находится внутри [0 ..1] .
Чтобы анимировать заливку с течением времени, вы можете попробовать это:
float actualValue = 0f; // the goal
float startValue = 0f; // animation start value
float displayValue = 0f; // value during animation
float timer = 0f;
// animate the value from startValue to actualValue using displayValue over time using timer. (needs to be called every frame in Update())
timer = Time.deltaTime;
displayValue = Mathf.Lerp(startValue, actualValue, timer);
mask.fillAmount = displayValue;
Чтобы запустить анимацию, сделайте это при изменении фактического значения:
actualValue = * some new value *;
startValue = maskFillAmount; // remember amount at animation start
timer = 0f; // reset timer.
Комментарии:
1. что не работает? Я просто показал способ использовать Lerp вместо ваших вычислений. ТЕПЕРЬ я добавил код для анимации эффекта с течением времени. Примечание: вы также можете использовать сопрограммы, но я предпочитаю переменные таймера.