Объем заполнения Unity lerp

#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 вместо ваших вычислений. ТЕПЕРЬ я добавил код для анимации эффекта с течением времени. Примечание: вы также можете использовать сопрограммы, но я предпочитаю переменные таймера.