В Godot 4 существует AnimationTree, это аналог Аниматор-контроллера Unity3d.
Откроем проект “Test Animation” созданный на прошлом уроке https://www.varnagame.site/wp-admin/post.php?post=547&action=edit
Добавим “AnimationTree” к “Character”:

“AnimationTree” подсвечен предупреждением:

это значит, что для “AnimationTree” нужно настроить некоторые параметры в инспектре

- В поле “The Root” выберем “AnimationNodeStateMachine” (конечный автомат анимаций) в нем мы сможем настроить переходы между анимациями:
- В поле “Anim Player” добавим текущий “AnimаtionPlayer”
- также нужно включить “Active”, чтоб анимации работали.
- В итоге у нас появится окно “дерево анимации”

внутри уже находятся start и end. Добавим все анимации (ПКМ + контекстное меню) и установим связи между ними (выбрав инструмент похожий на самолетик)

Алгоритм работы автомата следующий
- После старта персонаж переходит к анимации Idle (зацикленая анимация)
- если условие IdleToHipHop= true, анимация Idle к анимации HipHop.
- После окончани анимация HipHop переходит в анимацию Walking (зацикленая анимация).
- При достижении условия WalkingToCrouchedWalking анимация Walking переходит в анимацию Crouched Walking.
- После окончания анимация Crouched Walking переходит в анимацию Capoeira
- Если условие CapoeiraToCrouchedWalking = true персонаж переходит в анимацию Crouched Walking.
- Если условие CapoeiraToIdle = true – персонаж переходит в анимацию Idle
- Если условие CapoeiraToEnd = true – персонаж переходит в анимацию END
Краткий обзор окна настроек переходов анимаций
- Xfade Time – время перекрестного затухания между предыдущим состоянием и следующим.
- Switch Mode — тип перехода:
Immediate – Немедленный перейход в следующее состояние.
Sync – Немедленный перейход в следующее состояние, но будет установлено в позицию воспроизведения старого состояния.
At End – Дождется окончания воспроизведения текущего состояния, а затем переключится в начало анимации следующего состояния. - Advance Mode
Auto – включит переход автоматически при достижении этого состояния. Это лучше всего подходит для режима переключения At End.
Enabled – пока не работает вероятно будет работать в след релизах.
Disabled – отключает переход. - Advance Condition . Это текстовое поле, которое может быть заполнено именем переменной. Переменная может быть изменена из кода (подробнее об этом ниже).



Осуществим настройку всех переходов
Зациклим “Walking” и “Idle” для этого перейдем к настройкам расширенного импорта сцены выберем необходимые анимации и включим опции зацикливания.
переходы из зацикленных анимаций должны быть Immediate + Condition
переходы из незацикленных анимаций должны быть At End – по окончанию анимации лучше всего согласуется с Mode-Auto также можно добавить + параметр ( с параметрами в незацикленных анимациях нужно обходится осторожно так как может получится ситуация что анимация остановится на последнем кадре и будет ждать изменения статуса переменной )
Immediate + параметр. даст мгновенный переход
- переход Start -> Idle оставляем по умолчанию
- переход Idle -> HipHop анимация Idle зациклена поэтому ставим Immediate (Немедленный переход в следующее состояние из любого кадра) и параметр Condition IdleToHipHop при установке которого в true происходит переход в анимацию HipHop. Ставим Xfade Time = 2 секунды, чтоб переход был гладким. Получается смешивание анимаций
- переход HipHop -> Walking включаем At End – Переход произойдет автоматически, после окончания анимации HipHop, Xfade Time = 2 Condition оставляем пустым.
- переход Walking -> Crouched_Walking анимация Walking зациклена поэтому ставим Immediate Condition WalkingToCrouchedWalking при установке которого в true происходит переход в анимацию Crouched_Walking. Ставим Xfade Time = 2.
- переход Crouched_Walking -> Capoeira включаем At End – Переход произойдет автоматически, после окончания анимации Crouched_Walking , Xfade Time = 1 Condition оставляем пустым.
- Capoeira -> Crouched_Walking включаем At End – Переход произойдет автоматически, после окончания анимации Crouched_Walking если Condition CapueraToCrouchedWalking = true , Xfade Time = 1. переменная CapueraToCrouchedWalking нужна так как из Capoeira есть несколько переходов, к различным анимациям.
- Capoeira -> Idle включаем At End – Переход произойдет автоматически, после окончания анимации Capoeira если Condition CapueraToIdle = true , Xfade Time = 0.5. переменная CapueraToCrouchedWalking нужна так как из Capoeira есть несколько переходов, к различным анимациям.
- Capoeira -> End включаем At End – Переход произойдет автоматически, после окончания анимации Capoeira если Condition CapueraToEnd = true , Xfade Time = 0.5. переменная CapueraToEnd нужна так как из Capoeira есть несколько переходов, к различным анимациям.
Источники:
https://www.youtube.com/watch?v=eGt7ikx7FcQ&ab_channel=FinePointCGI
https://docs.godotengine.org/ru/4.x/tutorials/animation/animation_tree.html#id1