Как проверить, воспроизводится ли анимация?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как проверить, воспроизводится ли анимация?

Сообщение Zimaell 30 апр 2023, 12:45

У меня есть два типа анимации - зацикленная и срочная не зацикленная.
Зацикленная проигрывается при управлении, а срочная проигрывается когда к примеру попали, упал, в общем эта анимация прерывает любую зацикленную, при этом зацикленная не должна производится пока эта срочная не закончится.

Вопрос - как проверить когда она закончилась? (чтобы далее проверять можно ли проигрывать зацикленную)

В сети встречал подобный пример
Синтаксис:
Используется csharp
    private bool GetPlayAnimation(){
        bool b = false;
        if(animator.GetCurrentAnimatorStateInfo(AnimationLayer).IsName(AnimationName)){
        // if(animator.GetCurrentAnimatorStateInfo(AnimationLayer).IsName("LayerName." + AnimationName)){
            b = true;
            }
        return b;
        }


но у меня он выдает всегда false
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как проверить, воспроизводится ли анимация?

Сообщение 1max1 30 апр 2023, 14:39

Проверь дебагом правильно ли ты передаешь параметры AnimationLayer и AnimationName. Есть еще это https://docs.unity3d.com/ScriptReferenc ... pInfo.html, можно пробежать по массиву и сравнить свойство name с нужным.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как проверить, воспроизводится ли анимация?

Сообщение Alkos26Rus 30 апр 2023, 15:34

Это же все переходами делается в самом аниматоре
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Как проверить, воспроизводится ли анимация?

Сообщение Zimaell 30 апр 2023, 15:46

1max1 писал(а):Проверь дебагом правильно ли ты передаешь параметры AnimationLayer и AnimationName. Есть еще это https://docs.unity3d.com/ScriptReferenc ... pInfo.html, можно пробежать по массиву и сравнить свойство name с нужным.

это выдаёт нужный результат, но не в моём случае
Синтаксис:
Используется csharp
AnimatorClipInfo[] m_AnimatorClipInfo = animator.GetCurrentAnimatorClipInfo(AnimationLayer);
if(m_AnimatorClipInfo.Length > 0){
   b = true;
   Debug.Log("play clip => " + m_AnimatorClipInfo[0].clip);
   }

если просто переключать анимации то это работает, но я переключаю через фейд
Синтаксис:
Используется csharp
float normalizedTime = animator.GetCurrentAnimatorStateInfo(AnimationLayer).normalizedTime;
animator.CrossFadeInFixedTime(AnimationName, 0.3f, AnimationLayer, normalizedTime);

и вот тут это уже не работает, то есть ставлю за место 0.3 на 0 и работает, а больше нет...
можно ли это как-то решить?
Последний раз редактировалось Zimaell 30 апр 2023, 15:48, всего редактировалось 1 раз.
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как проверить, воспроизводится ли анимация?

Сообщение Zimaell 30 апр 2023, 15:47

Alkos26Rus писал(а):Это же все переходами делается в самом аниматоре

мне нужно это дело делать именно в скрипте, работают переходы нормально вот через фейд, запинка пока что при определении проигрывания...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как проверить, воспроизводится ли анимация?

Сообщение 1max1 30 апр 2023, 16:06

Может использовать GetNextAnimatorStateInfo?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как проверить, воспроизводится ли анимация?

Сообщение Alkos26Rus 30 апр 2023, 16:21

Zimaell писал(а):
Alkos26Rus писал(а):Это же все переходами делается в самом аниматоре

мне нужно это дело делать именно в скрипте, работают переходы нормально вот через фейд, запинка пока что при определении проигрывания...

У меня за все время ни разу не было потребности проигрывать анимации через скрипт, ноды и переходы решают все проблемы.

Поищи что еще содержит animator. может есть массив анимаций которые проигрываются в данный момент, так как смешиваться может много анимаций. У тебя кстати анимация не сильно короткая? Может 0.3 секунды для смешивания сильно много и анимация заканчивается?
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Как проверить, воспроизводится ли анимация?

Сообщение Zimaell 30 апр 2023, 18:48

1max1 писал(а):Может использовать GetNextAnimatorStateInfo?

GetNextAnimatorStateInfo даёт true при переходе и Current false, это хорошо, после перехода Next даёт false и Current true, вроде всё как нужно, но потом Current даёт всегда true , даже когда анимация уже закончилась, хотя у анимации loop выключен, да и визуально не проигрывается...

Alkos26Rus писал(а):
Zimaell писал(а):
Alkos26Rus писал(а):Это же все переходами делается в самом аниматоре

мне нужно это дело делать именно в скрипте, работают переходы нормально вот через фейд, запинка пока что при определении проигрывания...

У меня за все время ни разу не было потребности проигрывать анимации через скрипт, ноды и переходы решают все проблемы.

Поищи что еще содержит animator. может есть массив анимаций которые проигрываются в данный момент, так как смешиваться может много анимаций. У тебя кстати анимация не сильно короткая? Может 0.3 секунды для смешивания сильно много и анимация заканчивается?

у меня смешиваются обычные и вертексные анимации, так что через скрипт однозначно...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как проверить, воспроизводится ли анимация?

Сообщение Zimaell 30 апр 2023, 18:55

да и в инфо о клипе показывается его название, как будто она проигрывается, хотя визуально нет.
не знаю может как-то запускать из скрипта не CrossFadeInFixedTime а что-то на подобии запустить одноразово или с определённой длинной.
хотя мне кажется тогда уж лучше посчитать длину клипа и через дельтатайм вычислить когда она должна закончится и потом уже разрешать обычные анимации, наверно как-то так...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как проверить, воспроизводится ли анимация?

Сообщение 1max1 30 апр 2023, 19:08

Вот еще такое есть, можно как-то скомбинировать я думаю https://docs.unity3d.com/ScriptReferenc ... ition.html
https://docs.unity3d.com/ScriptReferenc ... nInfo.html
И еще есть события всякие для переходов https://docs.unity3d.com/ScriptReferenc ... viour.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20