Страница 1 из 1

Как узнать что анимация завершена?

СообщениеДобавлено: 23 июн 2011, 19:44
VitaliyCh
Здравствуйте! Не подскажете генерируется ли какое-нибудь событие при завершении проигрывания анимации и если есть то так его получить? Нашел переменную Animation.isPlaying, но проверять на каждом кадре не хочется. Есть еще класс AnimationEvent пока не смог с ним разобраться может кто подскажет как с ним работать? Спасибо!

Re: Как узнать что анимация завершена?

СообщениеДобавлено: 23 июн 2011, 20:03
Neodrop
Читаем про AnimationEvent

Re: Как узнать что анимация завершена?

СообщениеДобавлено: 23 июн 2011, 21:05
Левш@
Как альтернатива, есть еще такая примочка:

Синтаксис:
Используется javascript
yield WaitForSeconds(animation.clip.length);


Пауза (ждет пока закончиться анимация).

Re: Как узнать что анимация завершена?

СообщениеДобавлено: 23 июн 2011, 21:38
VitaliyCh

Re: Как узнать что анимация завершена?

СообщениеДобавлено: 23 июн 2011, 22:17
VitaliyCh
Скажите пожалуйста, а можно потом удалить такое событие: AnimationClip.AddEvent(AnimationEvent)? В документации не нашел ничего похожего :(

Re: Как узнать что анимация завершена?

СообщениеДобавлено: 23 июн 2011, 22:24
Neodrop
Как добавил, так и удалил. В окне редактирования анимаций.
Если хочется программно - можно пересоздать анимацию, без эвента.

Re: Как узнать что анимация завершена?

СообщениеДобавлено: 23 июн 2011, 22:26
seaman
Я сделал себе такой метод:
Синтаксис:
Используется csharp
    static public IEnumerator FinishAnim(Animation anim, Action<string> act, string name)
    {
        AnimationState desireAnim = null;
        foreach (AnimationState ast in anim)
        {
            if (ast.name != name || !anim.IsPlaying(ast.name)) continue;
            desireAnim = ast;
            break;
        }
        if(desireAnim == null)
            yield break;
        //время, на которое нужно вызывать WaitForSecond  (анимация на момент вызова может уже идти какое-то время!)
        var waitTime = desireAnim.length - desireAnim.time + Mathf.FloorToInt(desireAnim.time / desireAnim.length) * desireAnim.length;
        yield return new WaitForSeconds(waitTime);
        act("finishanim" + desireAnim.name);
    }

Ищет анимацию с переданным именем. Если такой нет, или она в данный момент не проигрывается - просто возвращается. Иначе вызывает указанную акцию (Action) и передает ей имя анимации. Action, естественно, должна быть определена в Вашем скрипте.

Re: Как узнать что анимация завершена?

СообщениеДобавлено: 23 июн 2011, 22:30
VitaliyCh
Всем большое спасибо!

Re: Как узнать что анимация завершена?

СообщениеДобавлено: 21 авг 2011, 19:23
Nachiket
мой метод тоже очень прост:
Синтаксис:
Используется javascript
var Walk : AnimationClip;
function Update()
{
if(!animation.IsPlaying("Walk"))
{
   ...
}
}