Как установить ограничение для нормализованного времени в Animator?

Как можно настроить Animator.GetCurrentAnimatorStateInfo(0).normalizedTime так, чтобы его значение не превышало единицы?
  • 2 декабря 2023 г. 19:19
Ответы на вопрос 1
У введенного вами выражения Animator.GetCurrentAnimatorStateInfo(0).normalizedTime в Unity сама по себе не может быть больше 1. Оно всегда будет в диапазоне от 0 до 1. 

Если у вас бесконечный цикл анимации и вам нужно ограничить количество циклов анимации, вам придется по-другому управлять этим процессом, так как normalizedTime будет сброшено обратно в 0 после каждого цикла анимации. 

Можно попробовать следующее:
1. Создайте целочисленную переменную, которая будет учитывать количество проигрываний анимации.
2. Установите слежение за normalizedTime и каждый раз, когда она достигает или приближается к единице, увеличивайте счетчик проигрываний.
3. Установите условие, при котором вы деактивируете цикл анимации, когда достигнуто определенное количество проигрываний.

Пример кода может выглядеть следующим образом:
```cs
public class MyAnimationControl : MonoBehaviour
{
    public Animator myAnimator;
    private int playCount = 0;
    private float lastNormalizedTime = 0f;

    void Update() 
    { 
        float normalizedTime = myAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime % 1;
        if (lastNormalizedTime > normalizedTime)
        { 
            playCount++;
            if (playCount > 5) { // число 5 может быть заменено на любое другое количество необходимых проигрываний
                myAnimator.enabled = false; // останавливаем анимацию после 5 проигрываний
            } 
        }
        lastNormalizedTime = normalizedTime;
    } 
}
```
Обратите внимание, что этот код должен быть подключен к GameObject с анимацией и что animator должен соответствовать animator на этом объекте. 

Это основное решение, для более сложных ситуаций вам может потребоваться более специализированное решение.
Если что-то не работает, рекомендуется добавить инструкции отладки для отслеживания значений и понимания, что происходит в вашем коде.
Похожие вопросы