Правильное проигрывание анимации

260
29 августа 2017, 09:33

Есть 2d персонаж с коллайдером и Rigidbody2d. Также у него есть две анимации: покоя и ходьбы. Есть переходы между ними в Animator в зависимости от скорости.

Есть третья анимация, анимация прыжка, на которую также есть переход в зависимости от bool переменной IsGrounded. Персонаж прыгает по нажатию клавиши пробел, но слишком быстро приземляется и IsGrounded становится false, анимация не успевает проиграться и переходит к анимации "покой".

Как сделать, чтобы персонаж прыгал и находился в воздухе или над землей пока не проиграться анимация, а не наоборот?

Answer 1

В Unity у Mecanim есть такая штука как BlendTree (Деревья смешивания). Они нужны для смешивания различных анимаций объекта. Именно его можно и использовать в данном случае. Однако для этого придется немного больше подзаморочиться. Вот список шагов:

  1. Вместо состояния (State) нужно создать Blend Tree. И назвать его соответственно, например "Jump".

  2. Вместо того, чтобы из набора спрайтов с прыжком делать одну анимацию, придется сделать по одной анимации на каждое изображение. То есть, если в анимации прыжка участвует 12 изображений, то придется создать 12 анимаций и разместить по одному изображению в каждом. Назвать например Jump1, Jump2, Jump3 и т.д.

  3. При создании этих нескольких анимаций все состояния (States) появятся в окне аниматора (Animator) Их надо будет оттуда удалить.

  4. Сделать двойной клик на Blend Tree с именем Jump. Попадешь в другую вкладку:

    Нужно будет нажать Add Motion Field по количеству анимаций прыжка. А также установить зависимость анимации от параметра vSpeed, то есть от параметра вертикальной скорости. И выбрать желательный диапазон. Например от -5 до 5:

    Здесь можно тонко настроить анимацию. Как видим можно поставить срабатывание любой анимации любого кадра в любое время (смотри параметр Thresh а также голубенькие волны сверху справа - их можно двигать и регулировать). Также там можно задавать даже скорость каждой анимации.

    На данном изображении видно, что пока значение вертикальной скорости больше нуля, то будут проигрываться анимации 1–6 (прыжок вверх), если скорость меньше нуля — 7–12 (падение)

  5. Переход из прыжка в состояние Exit если Ground == true

  6. Ну и через скрипт нужно теперь передавать значение нашей переменной vSpeed

    void FixedUpdate() {
        //...
        animator.SetFloat("vSpeed", rb.velocity.y);
    }
    

    Соответственно при клике на клавишу прыжка значение velocity.y у rigidBody2D меняется и передается в меканим и происходит прыжок

READ ALSO
Ошибка отправки на почту smtp.yandex.com

Ошибка отправки на почту smtp.yandex.com

Добрый вечер - какое может быть решение ошибки?

338
Округлить целое число до десятков

Округлить целое число до десятков

Допустим есть число

239
Opera VPN Selenium Web driver

Opera VPN Selenium Web driver

Как при запуске operadriver по умолчанию включать opera vpn?

548
Получить название файла

Получить название файла

Далее хочу копировать файлы

196