Unity, C#. Есть молдель с animator, в котором уже настроены стейты-анимации и параметры для переходов между ними.
Мне нужно проигрывать анимации в определенном порядке. Чтобы вызвать нужную анимацию мне достаточно чекнуть нужный параметр:
GetComponent.<Animator>().SetBool("someparameter",true);
Как написать условие "когда текущая анимация закончится"?
Все варианты что нахожу либо про Animation
а не Animator
, либо слишком сложны а нужен простой способ в котором можно быстро разобраться использовать.
У Animator
есть метод GetCurrentAnimatorStateInfo, который получает информацию о текущем состоянии на указанном слое Контроллера Аниматора (AnimatorController). То есть он возвращает AnimatorStateInfo Вот им и стоит воспользоваться.
У AnimatorStateInfo
, в свою очередь, есть поле IsName
- которое говорит, совпадает ли name
с именем активного состояния в statemachine
. В итоге может получится что-то такое:
private Animator animator;
private void Start() {
animator = GetComponentInChildren<Animator>();
}
public bool IsAnimationPlaying(string animationName) {
// берем информацию о состоянии
var animatorStateInfo = animator.GetCurrentAnimatorStateInfo(0);
// смотрим, есть ли в нем имя какой-то анимации, то возвращаем true
if (animatorStateInfo.IsName(animationName))
return true;
return false;
}
Как применение:
if (IsAnimationPlaying("Run"))
Debug.Log("Player is running");
Для проверки нескольких анимаций скорее всего придется их поместить в массив и пробегаться циклом:
foreach (var move in attackMoves) {
if (IsAnimationPlaying(move.animationName)) {
// do smth...
}
}
P.S. GetCurrentAnimatorStateInfo
- получает информацию на определенном слое. Поэтому чтобы взять инфу на самом базовом слое стоит GetCurrentAnimatorStateInfo(0)
. В других слоях индекс будет меняться естественно.
Не очень понятно что вы хотите, если после того как одна анимация закончилась вы хотите перейти в другую так настройте переходы между стейтами в Mecanim
.
Если вам нужно отловить сам момент когда делается выход из состояния можно воспользоваться классами StateMachineBehaivour который как раз умеет реагировать на работу в состояние. Этот скрипт навешивается в Mecanim на само состояние. Его надо выбрать в сцене и в окне инспектора добавить соотвествующий скрипт, как это делается с компонентами на сцене.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу прочитать JSON файл с использованием View модели (класса с названием всех переменных), но возникла загвоздкаНекоторые имена в файле имеют...
Представим ситуацию: В Visual Studio есть решение, которое состоит из 3 проектовВ каждом из проектов в файле app
Добрый день, вот допустим у меня есть код который посылает гет запрос
Пример кода взят из MSDNВ нем показано,как получить сумму ,группируя по одному полю