Объем заполнения Unity, остановка анимации при выполнении условия

#c# #unity3d

#c# #unity-игровой движок

Вопрос:

Итак, у меня есть изображение, которое начинается с заполнения 0. Затем, когда логическое значение равно true, выполняется некоторый код, который заполняет изображение до определенного объема. Моя проблема в том, что я добавляю условие, чтобы проверить, соблюден ли объем заполнения, но объем заполнения превышает максимальную величину.

 private void Update() {
  if (update) {
    if (icon.fillAmount < icon.fillAmount   amount) {
      icon.fillAmount  = amount * Time.deltaTime;
      Debug.Log(icon.fillAmount);
    } else update = false;
  }
}
  

В моем коде у меня есть логическое значение update, и когда оно равно true, оно проверяет, меньше ли объем заполнения, чем максимальный объем заполнения. Если это значение равно false, то программа запускает строку кода для плавного увеличения объема заполнения, затем регистрирует объем заполнения, в противном случае она изменяет логическое значение update на false . Но, например, если amount = 0.5f , когда я регистрирую fillAmount , это происходит снова amount . Я думаю, что это связано с Time.deltaTime , но я не знаю, как это решить.

Ответ №1:

Используйте Mathf.MoveTowards для достижения желаемого. Согласно документации Unity3D, эта функция:

Перемещает текущее значение к целевому.

По сути, это то же самое, что и Mathf.Lerp, но вместо этого функция гарантирует, что скорость никогда не превысит maxDelta. Отрицательные значения maxDelta удаляют значение от целевого.

   if (update) {
    if (icon.fillAmount < 1) {
      icon.fillAmount = Mathf.MoveTowards(icon.fillAmount, 1, amount * Time.deltaTime);
      Debug.Log(icon.fillAmount);
    } else update = false;
  }
  

Комментарии:

1. Прочитав документацию и попробовав это сам, я не понимаю, как это реализовать. icon.fillAmount = Mathf.MoveTowards(icon.fillAmount, icon.fillAmount amount, amount * Time.deltaTime); update = false; Это мой код. Когда я его запускал, он вообще не анимировался. PS Этот код находится внутри if инструкции

2. Попробуйте icon.fillAmount = Mathf.MoveTowards(icon.fillAmount, 1, amount * Time.deltaTime);

3. Вам также следует изменить свой оператор if. Проверьте мой ответ. Количество должно быть значением от 0 до 1.