Уроки Unreal Engine

Unreal Engine 4: учебное пособие по созданию анимации

В этом уроке вы узнаете, как импортировать файлы анимации в Unreal Engine 4 и использовать ее в своих играх.

Сейчас невозможно представить себе современную игру без анимации. Анимация дает каждой игре жизнь, передает движение игроков и объектов, добавляет индивидуальность. Без анимации персонаж будет выглядеть так, будто он просто скользит по локации, а не бежит.

К счастью, при помощи Unreal можно быстро оживить ваших персонажей!

В этом уроке вы научитесь:

  • Импортировать файлы сетки со скелетом;
  • Импортировать анимацию;
  • Создавать Blueprint одной анимации для перехода к другой анимации;
  • Связывать анимации между собой.

Обратите внимание: вы будете использовать чертежи в этом уроке. Пожалуйста, вернитесь к предыдущему, прежде чем продолжить.

Это занятие является частью серии, которая состоит из 10 уроков, посвященных Unreal Engine:

Начало работы

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

В корневом каталоге вы увидите папку с именем Animation Assets, именно она содержит информацию о персонаже и анимации, с которыми вы будете работать.

Перейдите в папку проекта и откройте SkywardMuffin.uproject в редакторе.

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

Нажмите Play, чтобы начать игру. Цель игры – прыгать на облаках и набирать очки- чем больше облаков вы пройдете, тем больше счет. Используйте для управления мышь.

Давайте попробуем использовать вместо обычного красного круга вот такого милого кексика:

Этот кекс уже содержит скелет, который позволяет вам оживить его:

Что такое скелет и для чего он нужен?

В 3D-программах для создания игр скелет представляет собой набор взаимосвязанных точек, называемых суставами. Обратите внимание, как эти связи выглядят на изображении ниже:

Примечание: использование терминов сустав и кость одинаково правильно для Unreal – они взаимозаменяемые.

Управляя скелетом и суставами, вы можете создавать различные позы для вашего игрового персонажа:

Когда вы изменяете одну позу на другую с плавным переходом, создается анимация:

Если вы создадите больше смен различных поз, то сможете создать что-то вроде такого:

В Unreal любая сетка с изображением скелетом называется Skeletal Mesh. Давайте начнем с импорта скелета для кекса.

Импорт Skeletal Mesh

Вам нужно перейти в Content Browser и найти параметр Characters\Muffin. Нажмите кнопку «Import» и перейдя в папку « SkywardMuffinStarter Animation Assets», выберите SK Muffin.fbx и нажмите Открыть.

В окне импорта перейдите в раздел «Mesh» и снимите флажок с параметра «Create Physics Asset». Этот параметр помогает создать эффект тряпичной куклы, но в этом уроке мы не будем этого делать.

В проекте, который вы скачали уже есть все необходимые материалы и текстуры, поэтому вам не придется их импортировать. Снимите флажки с «Import Materials» и «Import Textures».

Все остальные настройки должны остаться по умолчанию. Нажмите кнопку «Import» чтобы получить следующие объекты:

  • SK_Muffin: создает и предоставляет ссылку на объект Skeleton.
  • SK_Muffin_Skeleton: содержит список соединений и другую информацию, такую как иерархия этих соединений и их свойства.

Использование сетки скелета (Skeletal Mesh)

Прежде чем использовать новую скелетную сетку, вы должны предоставить ей доступ к материалу для определения формы объекта и его структуры. В противном случае перед вами будет просто серая бесформенная масса. Дважды щелкните SK_Muffin, чтобы открыть его и перейдите на панель «Asset Details». Вам нужно найти раздел «Material Slots», отметить материал M_Muffin и закрыть SK_Muffin.

Теперь давайте использовать объект SK_Muffin в качестве игрового персонаж. Вернитесь в Content Browser и дважды щелкните мышью BP_Muffin, чтобы открыть его.

Перейдите на панель «Components» и выберите компонент Mesh (Inherited). Вам нужно найти раздел Mesh на панели Details. Тут установите для свойства Skeletal Mesh значение SK_Muffin.

Чтобы сохранить результат нажмите Compile и вернитесь в главный редактор. Для того, чтобы попробовать поиграть за маленький маффин, нажмите Play:

Согласитесь, теперь игра уже выглядит намного лучше! Ваш следующий шаг — импортировать анимацию, которые добавит жизнь маффину.

Импорт анимации

Перейдите в Content Browser и нажмите кнопку «Import». Вам нужно удостовериться в том, что вы находитесь в SkywardMuffinStarter\Animation Assets и выбрать следующие файлы:

SK_Muffin_Death.fbx

SK_Muffin_Fall.fbx

SK_Muffin_Idle.fbx

SK_Muffin_Jump.fbx

SK_Muffin_Walk.fbx

Сделав это, нажмите кнопку «Открыть»:

Находясь в окне импорта, перейдите в раздел «Mesh» и снимите флажок с «Import Mesh». Таким образом вы сможете убедиться, что сетка скелета больше не будет импортироваться повторно.

Теперь вам необходимо убедиться в том, что для свойства Skeleton установлено значение SK_Muffin_Skeleton. Это необходимо сделать для того, чтобы показать программе какой именно скелет необходимо анимировать.

Нажмите Import All, чтобы импортировать файлы анимации с использованием указанных вами настроек:

Создание Blueprint для анимации

Blueprint для анимации практически не отличается от Blueprint для любого другого объекта – в него входит график с подробными задачами.

Чтобы создать Blueprint для анимации вам нужно перейти в Content Browser и нажать кнопку Add New. Теперь выберете Animation Animation Blueprint. В появившемся меню вам нужно найти свойство Target Skeleton и выбрать SK_Muffin_Skeleton, после этого нажмите кнопку ОК, чтобы создать план анимации:

Переименуйте его в ABP_Muffin и дважды щелкните по нему, чтобы открыть его в редакторе Animation Blueprint.

Редактор Blueprint для анимации

Редактор Blueprint Animation похож на обычный редактор Blueprint, но в дополнении он имеет еще четыре панели:

  1. Anim Graph: эта область предназначена для воспроизведения анимации.
  2. Preview Scene Settings: эта панель позволяет настроить сцену предварительного просмотра в окне просмотра анимации.
  3. Anim Preview Editor: все переменные, которые вы создаете будут отображаться в этом окне. Используйте его для предварительного просмотра влияния ваших переменных на конечный результат.
  4. Asset Browser: это окно содержит список анимаций, которые вы можете применить для редактируемого скелета.

Чтобы программа могла определить, когда должна воспроизводиться каждая анимация, вам нужно использовать State Machine.

Что такое State Machine?

State Machine — это набор свойств и правил. В этом уроке это будут свойства и правила для анимации. Несколько State Machine могут находиться только в одном состоянии одновременно. Чтобы перейти в другое состояние, должны быть соблюдены определенные условия, определенные правилами.

Ниже приведен пример простого State Machine, который демонстрирует состояния прыжка и правила перехода к каждому новому состоянию:

Несколько State Machine могут иметь связь между собой. Посмотрите, на изображении ниже состояния Jump и Fall могут переходить друг в друга:

Без этой связи игровой персонаж не сможет выполнить двойной прыжок. Смотрите, персонаж сможет войти в состояние Jump только из состояния ожидания.

Создание State Machine

Вам необходимо убедиться в том, что вы находитесь в Anim Graph и щелкнув по пустой области мышью, выбрать команду «Add New State Machine».

Таким образом вы получите новый узел State Machine к вашему графику. Переименуйте State Machine в Locomotion и подключите State Machine к узлу анимации Final Animation Pose:

Теперь Locomotion будет определять оконечную анимацию для вашего кекса. Дважды щелкните на Stateomotion State Machine, чтобы открыть его. Смотрите, внутри находятся еще один вход:

Состояние, которое связано, является состоянием по умолчанию. Для этого урока состояние по умолчанию является бездействующей анимацией. Создайте это состояние, щелкнув правой кнопкой мыши пустую область на графике и выбрав в меню пункт Add State. Переименуйте новый объект в Idle:

Теперь вам нужно подключить узел Entry к состоянию Idle:

Проблема заключается в том, что новое состояние все еще не имеет связи с анимацией. Давайте это исправим.

Соединение анимации с состоянием

Откройте состояние Fall, дважды щелкнув по нем мышкой. Чтобы создать связь с анимацией, вам нужно перейти в Asset Browser и переместить на график событий объект SK_Muffin_Idle:

Затем подключите узел Play SK_Muffin_Idle к узлу Final Animation Pose:

Теперь, чтобы использовать Animation Blueprint, вам необходимо обновить BP_Muffin.

Использование Animation Blueprint

Нажмите Compile, чтобы сохранить текущий результат вашей работы и переключитесь на BP_Muffin. Теперь перейдите к панели Components и выберете Mesh (Inherited). На панели Details найдите раздел Animation, в котором вам нужно установить Animation Mode чтобы использовать Animation Blueprint. Последним действием вам необходимо указать класс анимации — ABP_Muffin.

Теперь Skeletal Mesh будет использовать ABP_Muffin в качестве Animation Blueprint.

Для сохранения результатов нажмите Compile и закройте BP_Muffin. Перейдите в главный редактор и нажмите кнопку «Play», чтобы посмотреть, что у вас получилось. Поскольку сейчас состоянием по умолчанию является бездействие, маффин будет автоматически использовать анимацию, которая определяет его состояние покоя:

Создание состояния прыжка и падения

Вернитесь к ABP_Muffin и переключитесь обратно на график для Locomotion State Machine:

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

Перейдите в Asset Browser и переместите анимацию SK_Muffin_Jump в любое пустое место на графике при помощи мышки:

Измените название на Jump.

Повторите процесс, используя анимацию SK_Muffin_Fall, и переименуйте это состояние в Fall.

Теперь у вас есть три состояния: бездействие, прыжок и падение.

Теперь вам необходимо связать эти три состояния друг с другом. Вы можете сделать это, щелкнув по серой области состояния, из которого вы хотите сделать новый переход. Отпустите левую кнопку мыши на серой области конечного состояния, чтобы создать соединение:

Создайте следующие переходы:

Idle  Jump

Jump  Fall

Fall  Jump

Fall  Idle

Теперь, когда у вас есть переходы, вам нужно определить, когда каждый из них должен происходить. Эти настройки устанавливаются при помощи правил перехода (Transition Rule).

Что такое правила перехода

Этот значок обозначает Transition Rule:

Каждое правило перехода содержит узел Result с одним входом:

Если для этого входа стоит значение = true, значит происходит переход к следующему состоянию.

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

Определение прыжка или падения персонажа

Создайте две логические переменные с именами IsJumping и IsFalling.

Сначала установите значение IsJumping, переключившись на Event Graph и найдя узел Event Blueprint Update Animation. Этот узел будет функционировать также как узел Event Tick.

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

Таким образом будет происходить проверка скорости персонажа на оси Z. Если значение будет >0, значит игрок прыгает и IsJumping будет установлен в значение true.

Чтобы игра могла проверить, падает ли персонаж, вам нужно выполнить противоположную проверку. Добавьте выделенные на изображении узлы:

Теперь IsFalling будет иметь значение true, если Z-скорость игрока меньше 0.

Пришло время использовать эти переменные для определения правил перехода.

Определение правил перехода

Сначала вы определите правило перехода из режима ожидания в прыжок. Вернитесь к меню Locomotion State Machine и дважды щелкните мышкой по правилу перехода Idle to Jump, чтобы открыть его.

Создайте узел IsJumping и подключите его к узлу Result.

Теперь состояние Idle будет переходить в состояние Jump, когда IsJumping получит значение true.

Повторите этот процесс для правил перехода «Прыжок к падению и падению к прыжку», используя следующие переменные:

Jump   Fall: IsFalling

Fall  Jump: IsJumping

Теперь эти два состояния могут сменять друг друга при помощи переходов.

Осталось определить еще одно правило перехода —  Fall Idle.

Для перехода в состояние ожидания игрок не может прыгать или падать. Чтобы программа могла в этом убедиться вы можете использовать узел NOR, который будет возвращать значение true, только если оба его входа будут иметь значение = false.

Создайте узел NOR и подключите к нему узлы IsJumping и IsFalling. После этого подключите узел NOR к узлу Result:

Теперь состояние Fall может переходить в состояние Idle, когда IsJumping и IsFalling имеют значение false.

Нажмите Compile, чтобы сохранить результат работы и вернитесь в главный редактор. Нажмите Play, чтобы посмотреть, как работают переходы состояний:

Примечание: вы также можете посмотреть, как функционируют переходы в редакторе предварительного просмотра Anim.

Обратите внимание, как сейчас перемещается маффин по земле – он просто скользит, потому что у вас еще не установлена анимация для ходьбы.

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

Что такое Blend Space?

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

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

Используя Blend Space, все, что вам нужно сделать, это заменить узел анимации бездействия персонажа:

Создание и использование Blend Space

Перейдите в Content Browser и выполните действия: Add New Animation Blend Space 1D.

Примечание: Разница между Blend Space и Blend Space 1D состоит в том, что первое может иметь два входа, а второе только один.

В всплывающем окне выберите пункт SK_Muffin_Skeleton:

Переименуйте объект в BS_IdleWalk, а затем дважды щелкните по нему, чтобы открыть его в редакторе анимации.

Когда вы откроете Blend Space, то увидите панель внизу. Это редактор Blend Space, в который вы будете добавлять новую анимацию:

Добавление анимации в Blend Space

Для начала вам нужно изменить название значения оси (вход). Для этого перейдите на панель «Asset Details» и найдите раздел «Axis Settings». Измените свойство Horizontal Axis\Name на Speed.

Теперь вы можете добавите анимацию, перейдя в Asset Browser и переместив в левую часть сетки Blend Space анимацию SK_Muffin_Idle. Необходимо установить ее таким образом, чтобы были значения привязки 0.0:

Подсказка: Чтобы отобразить названия анимаций, нажмите значок метки в левом верхнем углу сетки Blend Space.

Затем добавьте анимацию SK_Muffin_Walk со значением 100.0:

Теперь Blend Space будет миксовать анимацию ходьбы и состояния покоя в зависимости от входного значения. Если ввод = 0, будет воспроизводиться только анимация, настроенная для режима ожидания. Если ввод = 100, соответственно будет воспроизводиться анимация ходьбы.

Примечание: Сейчас эти значения являются произвольными. Например, вы можете изменить максимальное значение на 500. Это приведет к тому, что анимация ходьбы будет воспроизводиться только на более высоких скоростях. Вы в любой момент можете изменить эти значения в разделе «Axis Settings» на панели «Asset Details».

Использование Blend Spaces

Закройте BS_IdleWalk и откройте ABP_Muffin. Переключитесь на Locomotion State Machine и затем откройте свойства состояние Idle.

Сначала вам нужно удалить узел Play SK_Muffin_Idle. Теперь добавьте Blend Space для BS_IdleWalk, при помощи мышки. Далее вам необходимо подключить узел BS_IdleWalk к узлу Final Animation Pose.

Настройка скорости перемещения персонажа

Создайте новую переменную и назовите ее Speed. После этого переключитесь на Event Graph и добавьте новый выход в узел Sequence. Теперь добавьте еще несколько новых узлов, которые выделены на изображении:

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

Теперь вернитесь к графику для состояния Idle и подключите переменную Speed к входу Speed узла BS_IdleWalk:

Теперь BS_IdleWalk сможет чередовать анимацию для состояния покоя и ходьбы.

Нажмите Compile, чтобы сохранить результат работы и вернитесь в главный редактор. Нажмите Play, чтобы посмотреть, как работает Blend Space:

Создание анимации для гибели персонажа

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

Решением этой проблемы является использование Blend Poses by bool node. Этот узел может переключаться между двумя анимациями, в зависимости от значения входного логического значения. Прежде чем создать его, вам нужна новая переменная, которая хранит данные о статусе персонажа.

Проверка, умер ли персонаж

Вернитесь к ABP_Muffin, создайте логическую переменную с именем IsDead и переключитесь на Event Graph. Тут вам нужно добавить новый выход для узла Sequence и присоединить к нему выделенные на изображении узлы:

Смена состояний с помощью Bool Node

Переключитесь на Anim Graph и добавьте анимацию SK_Muffin_Death. Выбрав его, перейдите на панель «Details» и снимите флажок с «Loop Animation».

Это обеспечит воспроизведение анимации смерти только один раз и при соблюдении определенных условий.

Теперь создайте Blend Poses:

Вам нужно выбрать узел Blend Pose и перейти на панель Details, чтобы в разделе «Option» установить флажок «Reset Child on Activation property»:

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

Далее добавьте новую переменную IsDead и подключите следующим образом:

Теперь, если IsDead имеет значение true, анимация смерти будет воспроизводиться в нужный момент и при соблюдении всех установленных условий. В случае, когда IsDead будет иметь значение false, будет воспроизводиться текущая анимация Locomotion State Machine.

Теперь еще раз нажмите Compile, чтобы сохранить текущие изменения и закройте ABP_Muffin. Нажмите Play чтобы протестировать новую анимацию:

Что делать дальше?

Вы можете скачать готовый проект.

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

О других типах анимации вы можете узнать на странице Skeletal Mesh Animation System документации Unreal Engine.

В следующем занятии вы узнаете, как добавлять звуковые эффекты и музыку в вашу игру.

Перевод
raywenderlich.com
Показать больше

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Закрыть
Закрыть