В 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