Unity Animation: как проверить, завершилось ли воспроизведение анимации

Чтобы проверить, завершилось ли воспроизведение анимации в Unity, вы можете использовать следующие методы:

  1. Анимационные события: Unity позволяет вам определять собственные события на временной шкале анимации. Добавив событие анимации в конце анимационного клипа, вы можете активировать метод или функцию в своем скрипте, чтобы указать, что воспроизведение анимации завершено.

Вот как вы можете использовать анимационные события:
a. Откройте окно «Анимация» в Unity.
b. Выберите последний кадр анимационного клипа.
c. Нажмите кнопку «Добавить событие» в окне «Анимация».
d. Укажите имя функции или метод, который вы хотите вызвать после завершения анимации.
e. В своем скрипте реализуйте функцию, которая будет вызываться при запуске события анимации. Вы можете выполнить любое желаемое действие, например установить флаг или вызвать другой метод.

Пример:

using UnityEngine;
public class AnimationController : MonoBehaviour
{
    private bool animationFinished = false;
    public void AnimationFinishedEvent()
    {
        animationFinished = true;
        // Perform additional actions here
    }
}
  1. Animation.isPlaying: вы можете использовать свойство Animation.isPlaying, чтобы проверить, воспроизводится ли анимация в данный момент. Этот метод подходит, если вы используете устаревшую систему анимации в Unity.

Пример:

using UnityEngine;
public class AnimationController : MonoBehaviour
{
    private Animation animationComponent;
    private void Start()
    {
        animationComponent = GetComponent<Animation>();
    }
    private void Update()
    {
        if (!animationComponent.isPlaying)
        {
            // Animation has finished playing
        }
    }
}
  1. AnimationState.normalizedTime: если вы используете компонент Animator и систему Animator Controller, вы можете проверить свойство AnimationState.normalizedTime, чтобы определить, завершилось ли воспроизведение анимации. Это свойство представляет нормализованное время (от 0 до 1) анимационного клипа, где 1 указывает на завершение анимации.

Пример:

using UnityEngine;
public class AnimationController : MonoBehaviour
{
    private Animator animator;
    private void Start()
    {
        animator = GetComponent<Animator>();
    }
    private void Update()
    {
        AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
        if (stateInfo.normalizedTime >= 1f)
        {
            // Animation has finished playing
        }
    }
}