Анимация
May 3

Contextual Animation Plugin в многопользовательских играх (UE 5.3+)

Введение

В Unreal Engine появилась система контекстной анимации, позволяющая создавать синхронизированные анимации для определенных действий, о которой мы впервые узнали из видеоролика-откровения Unreal Engine 5:

Эта система позволяет воспроизводить анимации, требующие определенной синхронизации, как в трансформации, так и во времени. Чтобы активировать эту функцию, откройте Edit и в окне Plugins включите Motion Warping и Contextual Animation.

Как настроить контекстную анимацию

Все актеры, входящие в состав контекстной анимации, должны иметь компонент ContextualAnimSceneActorComponent. Плагин обрабатывает выравнивание этих акторов с помощью Motion Warping. Поэтому только Актор, инициирующий взаимодействие и требующий синхронизации с назначенным преобразованием, должен быть оснащен MotionWarpingComponent.

Контекстная анимационная сцена

После того как мы предоставили все необходимые компоненты нашим актерам, мы можем создать наш первый актив Contextual Anim Scene Asset. Для этого создайте актив Contextual Anim Scene (CAS) в браузере контента.

Если мы откроем только что созданный актив, то обнаружим область просмотра, временную шкалу и ряд свойств, которые мы рассмотрим далее. Но сначала давайте сосредоточимся на активе Roles Asset.

Этот актив данных определяет несколько ролей по имени в нашей контекстной анимации, как показано на рисунке ниже.

Мы рекомендуем давать несколько обобщенные названия, поскольку эти активы предназначены для повторного использования в нескольких контекстных анимационных сценах. На изображении Interactor - это Актор, который начинает взаимодействие, а Target - это Актор, с которым мы взаимодействуем.

Затем в активе CAS мы назначаем только что созданный актив Roles Asset и для нашего примера задаем Target как Primary Role (актер, с которым мы хотим взаимодействовать). Затем добавьте в массив Override Preview Data столько записей, сколько участников в нашей контекстной анимации, определенной также с помощью Roles Asset.

В нашем случае у нас два участника, поэтому мы расширяем массив на два элемента следующим образом:

В моем случае взаимодействие начинает женщина-манекен.

Примечание: Контекстные анимации можно использовать и для неанимированных актеров (например, сидящих на стуле), которые также должны быть частью вашего актива "Роли".

Требования к анимационным последовательностям (и монтажу)

После настройки актива CAS со всеми необходимыми свойствами мы готовы приступить к созданию анимационных дорожек. Но прежде чем начать, давайте рассмотрим требования к анимационным последовательностям, составляющим нашу анимационную дорожку.

Система контекстных анимаций использует motion warping для внутреннего искривления выбранных участников к определенному трансформированию. Это гарантирует, что анимация будет воспроизводиться в нужное время и в нужном положении, позволяя идеально синхронизировать анимацию во время игры, в соответствии с первоначальным видением анимационного программного обеспечения (Maya, Blender...).

В нашем случае Interactor должен двигаться к Цели перед началом анимации захвата, для этого мы включим Root Motion в Animation Sequence в Montage нашего Interactor, а затем, добавим Motion Warping Anim Notify State на время, которое мы хотим, чтобы длилось искривление (чем короче, тем быстрее наш персонаж доберется до места назначения, чтобы воспроизвести контекстную анимацию).

Имя Warp Target Name будет использовано позже для определения преобразования синхронизации в активе CAS.

Примечание: Посетите документацию motion warping, чтобы узнать больше об этой функции и всех переменных, которые вы найдете в Anim Notify State.

В нашем случае монтаж Target не нуждается в дополнительной настройке. Однако, если анимация персонажа в CAS Asset подразумевает движение, Root Motion будет необходим для их монтажей, чтобы персонаж двигался вместе с движением Root Bone.

Примечание: Каждая анимационная дорожка в активе CAS состоит из комбинации анимаций для всех наших участников.

Создание новой дорожки

Чтобы создать новую анимационную дорожку, нажмите на кнопку New AnimSet, расположенную в верхней части CAS Asset; откроется окно, в котором вы можете добавить монтаж для каждого участника (если применимо).

Вы также можете настроить поведение столкновений между участниками и логику их вложений. Например, в случае анимации захвата мы вставим монтаж нападающего в анимацию Interactor, а монтаж смерти - в анимацию Target.

После добавления монтажей вы можете щелкнуть на них в треке анимации, чтобы настроить дальнейшие параметры. Здесь мы найдем Mesh to scene, который позволит вам настроить трансформацию вашего актора для правильного воспроизведения синхронизированной анимации.

Если все сделать правильно, получится что-то вроде этого:

Наше превью выглядит отлично! Но если мы хотим, чтобы это работало во время игры, нам нужно настроить искривление движения в нашем CAS Asset. Для этого добавьте новый член в массив Warp Point Definitions, затем в его свойствах напишите имя, которое вы написали в Warp Target Name в предыдущем разделе, используя Primary Actor (Target) в качестве Mode, и, наконец, нажмите на Update Warp Points. Это добавит точку искривления в нашем Целевом актере, которая заставит Motion Warping, настроенный в нашем монтаже, искривляться в его сторону.

После этого мы можем добавить больше наборов AnimSets, если хотим добавить различные монтажи к этой контекстной анимации (например, различные анимации захвата), Критерии отбора обеспечат воспроизведение подходящего.

Критерии выбора контекстной анимации

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

Проще говоря, эти критерии выбора помогают выбрать подходящий AnimSet для работы. В начале выполнения анимационные наборы оцениваются в случайном порядке. Выбирается первый, удовлетворяющий всем критериям отбора. Если же ни один из них не удовлетворяет критериям, то не будет выбран ни один.

Добавление критериев выбора

Чтобы добавить критерии отбора, перейдите к Монтажу, добавленному в ваш CAS. В нем вы обнаружите массив "Критерии отбора".

В этот массив можно включить несколько критериев выбора, которые можно определить как с помощью C++, так и с помощью Blueprints. Плагин поставляется с несколькими:

  • Contextual Anim Selection Criterion Cone: Проверяет, находится ли цель внутри заданного пользователем Конуса. Если да, то критерий проходит.
  • Contextual Anim Selection Criterion Distance: Проверяет, находится ли цель в пределах дистанции, может оцениваться в 3D или 2D.
  • Contextual Anim Selection Criterion Trigger Area: Проверяет, находится ли цель в заданной пользователем 3D-области, если да, то критерий проходит.

Некоторые из этих критериев сопровождаются визуализацией отладки.

Как воспроизвести контекстную анимацию во время игрового процесса

Воспроизвести контекстную анимацию в Blueprints и C++ очень просто, для этого нужно всего лишь 2 функции:

В приведенном примере я воспроизвожу контекстную анимацию внутри способности, инициированной атакующим, поэтому Primary будет жертвой, а Secondary - атакующим, как в CAS. После того как наши привязки настроены, мы можем запустить контекстную анимационную сцену.

Дополнительные функциональные возможности

Компонент Contextual Anim Scene Actor Component определяет ряд делегатов, которые мы можем использовать для реакции на различные события, происходящие во время набора анимации.

При желании контекстную анимацию можно вывести заблаговременно, вызвав EarlyOutContextualAnimScene из Contextual Anim Scene Actor Component.

Подробности мультиплеера

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

На момент написания статьи контекстные анимации должны вызываться только с сервера или с автономного прокси (ROLE_AutonomousProxy), и они не поддерживают предсказание. Для примера, в примере Ability, приведенном выше, я запускаю Anim Scene только на Authority.

Если вы все сделали правильно, то сможете делать много крутых вещей (благодаря Doğa):