Вы находитесь на странице: 1из 39

GAME DEVELOPMENT

Разработка игр на Unreal Engine

Харьковский филиал КА «ШАГ»


https://itstep.kh.ua
ТЕМА: FIRST PERSON SHOOTER

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

В паке AnimStarterPack имеется множество различных анимаций для


персонажа с оружием. Наша задача – реализовать логику их переключения. Для этих
целей в UE необходимо создать отдельный Blueprint, который имеет специальный
тип Animation Blueprint и реализовать в нем логику переключения анимаций. Мы
же будем использовать готовый Animation Blueprint, который предоставляется
паком AnimStartPack и внесем в него ряд изменений.

Перейдите в папку AnimStarterPack и найдите в ней файл


UE4ASP_HeroTPP_AnimBlueprint:

Выделите его и скопируйте (Ctrl+C). Перейдите в папку Blueprints и вставьте


его там. Измените имя скопированного BP на «FPSAnimBlueprint»:

С т р а н и ц а 2 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь откройте Blueprint нашего персонажа Player.

Выделите на панели компонентов Components компонент Mesh и справа на


панели Details найдите группу параметров Animation:

Нам необходимо указать, что для анимирования персонажа необходимо


использовать FPSAnimBlueprint. Для этого установите значение параметра
Animation Mode в Use Animation Blueprint. Затем установите значение параметра
Anim Class в FPSAnimBlueprint:

Откомпилируйте Player, сохраните его и закройте окно редактора.

С т р а н и ц а 3 | 39
ТЕМА: FIRST PERSON SHOOTER

Запустите игру. Как вы видите, персонаж теперь стал анимированным и при


движении анимация успешно переключается, но сама анимация нам не подходит,
потому что в предустановленной анимации предполагается создание игры с видом
сверху и оружие манекен держит на уровне пояса. Мы же создаем FPS, поэтому нам
нужно внести ряд правок в FPSAnimBlueprint.

Откройте FPSAnimBlueprint. Найдите слева панель Graphs, в которой


расположены все графы и раскройте граф AnimGraph. Затем дважды кликните на
Locomotion, чтобы перейти к автомату состояний:

Перед вами откроется автомат состояний. Это граф, который содержит в


себе различные состояния объекта и условия переходов из одного состояния в
другое:

В первую очередь мы изменим состояния Idle (состояние покоя). Кликните


дважды на состоянии Idle в графе автомата состояний. В результате откроется граф
состояния Idle:

С т р а н и ц а 4 | 39
ТЕМА: FIRST PERSON SHOOTER

Суть графа для этого состояния состоит в циклическом воспроизведении


одной и той же анимации (на данный момент Idle_Rifle_Hip). Нам необходимо
поменять эту анимацию.

Выделите нод Play Idle_Riffle_Hip и удалите его:

Теперь найдите справа внизу, на панели Asset Browser анимацию


Idle_Rifle_Ironsights:

Перетащите эту анимацию в граф:

С т р а н и ц а 5 | 39
ТЕМА: FIRST PERSON SHOOTER

Осталось лишь соединить выход нода Play Idle_Rifle_Ironsights со входом


нода Output Animation Pose:

Откомпилируйте FPSAnimBlueprint и сохраните его. Запустите игру, чтобы


протестировать результат изменения анимации.

Теперь в состоянии покоя все отлично! Но при движении автомат уходит


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

Откройте FPSAnimBlueprint и перейдите в граф автомата состояний


Locomotion. За передвижение в данном графе отвечает состояние Jog:

С т р а н и ц а 6 | 39
ТЕМА: FIRST PERSON SHOOTER

Дважды кликните по состоянию Jog, чтобы открыть его для редактирования.


В этом состоянии используется другой подход. На специальный нод, который
называется Blendspace Player, подается два параметра – Direction (направление
движения) и Speed (скорость движения). В зависимости от значений этих двух
параметров, происходит переключение между анимациями для различных типов
движения (вперед, назад, влево, вправо):

Кликните дважды ЛКМ по ноду BS_Jog, чтобы открыть его для


редактирования. Перед вами откроется окно редактора:

С т р а н и ц а 7 | 39
ТЕМА: FIRST PERSON SHOOTER

Точки внизу отображаются зависимость анимации от значения параметров


Direction и Speed, т.е. при каких значениях данных параметров, какая анимация
будет включаться. Вот эти точки нам и нужно отредактировать!

Сначала мы отредактируем движение вперед. Удалите две точки, которые


выделены на скриншоте ниже (выделите точку и нажмите на клавишу delete на
клавиатуре):

Теперь, на место обоих точек перетащите анимацию


Walk_Fwd_Rifle_Ironsights:

С т р а н и ц а 8 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь удалите следующие две точки:

Перетащите на их место анимацию Walk_Rt_Rifle_Ironsights:

Теперь удалите следующие две точки:

Перетащите на их место анимацию Walk_Bwd_Rifle_Ironsights:

С т р а н и ц а 9 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь удалите следующие две точки:

Перетащите на их место анимацию Walk_Lt_Rifle_Ironsights:

Осталось изменить последние две точки. Выделите и удалите точки,


отмеченные на скриншоте ниже:

Перетащите на их место анимацию Walk_Bwd_Rifle_Ironsights:

С т р а н и ц а 10 | 39
ТЕМА: FIRST PERSON SHOOTER

Вот и все! Теперь откомпилируйте FPSAnimBlueprint, сохраните его и


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

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

Сначала необходимо сделать привязку прыжка к какой-то клавише (чаще


всего пробел). Перейдите в настройки проекта (Edit-Project Settings) и найдите
настройку ввода (пункт Input в группе Engine):

Нам необходимо добавить еще одну привязку Action Mappings. Нажмите на


плюсик рядом с пунктом Action Mappings и добавьте новую привязку. Назовите ее
«JumpAction»:

Теперь кликните ЛКМ по выпадающему списку под JumpAction и выберите в


появившемся меню пункт Space Bar:
С т р а н и ц а 11 | 39
ТЕМА: FIRST PERSON SHOOTER

Привязка создана! Закройте настройки проекта и перейдите в Blueprint


персонажа Player.

Кликните ПКМ по пустому месту в графе и добавьте нод события


JumpAction:

Среда автоматически создаст стартовый нод события:

Сначала мы создадим новую переменную, которая будет являться флажком и


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

Добавьте на панели Variables новую переменную типа Boolean и назовите ее


«JumpButtonDown»:

С т р а н и ц а 12 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь приступим к реализации скрипта. Когда пользователь нажмет на


пробел, мы выполним стандартный нод Jump, который реализует прыжок
персонажа:

После этого, если прыжок возможен в текущем положении (это проверяет


нод Can Jump), мы установим значение переменной JumpButtonDown в True:

Когда пользователь отпустит клавишу прыжка, мы вызовем стандартную


функцию Stop Jumping, которая прекращает прыжок:

С т р а н и ц а 13 | 39
ТЕМА: FIRST PERSON SHOOTER

После этого мы установим значение переменной JumpButtonDown в False:

Теперь нам необходимо внести ряд правок в Blueprint анимации. Откройте


FPSAnimBlueprint и перейдите в Event Graph.

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


при обновлении анимации:

С т р а н и ц а 14 | 39
ТЕМА: FIRST PERSON SHOOTER

Первым делом разорвите связь между нодом установки значения переменной


Direction и нодом Cast To Ue4ASP_Character:

После этого добавьте в цепочку нодов, после нода установки значения


переменной Direction (SET Direction) нод Cast To Player:

С т р а н и ц а 15 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь разорвите связь между нодом Cast To Ue4ASP_Character и нодом


Sequence. Присоедините к ноду Sequence добавленный нами нод Cast To Player:

Суть всех этих манипуляций со скриптом состоит в том, что мы вместо


стандартного персонажа Ue4ASP_Character внедряем в алгоритм анимации нашего
персонажа Player.

Теперь добавьте на пустом месте графа нод Try Get Pawn Owner, при
помощи которого мы доберемся до текущего персонажа во время игры, и
присоедините выход нода Return Value ко входу Object нода Cast To Player:

С т р а н и ц а 16 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь потяните за выход As Player нода Cast To Player и добавьте нод Get
JumpButtonDown, при помощи которого мы можем получить текущее значение
переменной JumpButtonDown:

Теперь разорвите связь переменной JumpButtonDown, которая шла от нода


Cast To Ue4ASP_Character к ноду Can Jump и присоедините к этому нашу
переменную JumpButtonDown:

С т р а н и ц а 17 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь осталось лишь разорвать связь с нодом установки значения


переменной Crouching (SET Crouching) и удалить нод Cast To Ue4ASP_Character.
В конченом итоге у вас должен получиться вот такой граф:

Теперь нам необходимо немножко изменить саму анимацию прыжка.


Перейдите в граф автомата состояний Locomotion и найдите на нем состояние
Jump:

С т р а н и ц а 18 | 39
ТЕМА: FIRST PERSON SHOOTER

Откройте состояние Jump:

Как мы видим, здесь просто циклически воспроизводится анимация


Jump_From_Stand. Эта анимация нам не очень подходит, потому что она рассчитана
на то, что персонаж держит автомат на уровне пояса.

Выделите и удалите нод Play Jump_From_Stand. Найдите на панели Asset


Browser и перетащите на граф анимацию Jump_From_Stand_Ironsights:

Соедините эти два нода друг с другом и откомпилируйте FPSAnimBlueprint:

С т р а н и ц а 19 | 39
ТЕМА: FIRST PERSON SHOOTER

Как мы видим, на данный момент произошла ошибка компиляции. На панели


Compiler Results выведено само сообщение, которое описывает ошибку. Кликните
ЛКМ на подчеркнутой надписи Jump_From_Stand_Asset в первой строке:

В итоге откроется новая вкладка, в которой будет виден тот нод, который
вызвал ошибку компиляции:

Кликните ПКМ по пустой области в графе и в появившемся меню найдите


нод Time Remaining (ratio) (Jump_From_Stand_Ironsights):

С т р а н и ц а 20 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь удалите проблемный нод и подключите в цепочку нод Time Remaining


(ratio) (Jump_From_Stand_Ironsights):

Теперь откомпилируйте FPSAnimBlueprint, сохраните его и закройте окно


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

Поворот туловища персонажа при осматривании


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

Откройте Blueprint анимации персонажа FPSAnimBlueprint. Перейдите в


AnimGraph, дважды кликнув по нему ЛКМ в панели Graphs:

Перед вами откроется простейший граф, в котором имеется автомат


состояний Locomotion, подключенный к конечному ноду, задающему нужную
анимацию Final Animation Pose:

С т р а н и ц а 21 | 39
ТЕМА: FIRST PERSON SHOOTER

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


Раздвиньте ноды Locomotion и Final Animation Pose по сторонам:

Теперь кликните ПКМ по пустому месту в графе и добавьте нод Transform


(Modify) Bone:

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


для поворота туловища персонажа. Какие именно части скелета мы будем
трансформировать? Нам необходимо поворачивать спину. Если взглянуть на кости
скелета, то мы увидим, что у нас есть три разных кости, отвечающих за спину:
spine_01, spine_02 и spine_03. Мы будем трансформировать все три части для того,
чтобы поворот был более плавным и красивым!

С т р а н и ц а 22 | 39
ТЕМА: FIRST PERSON SHOOTER

Поскольку нам нужно трансформировать три кости, создайте еще две копии
нода Transform (Modify) Bone:

Для каждого из этих нодов нам необходимо будем изменять лишь один
параметр – Rotation (угол поворота). Поэтому сейчас мы сразу исключим все
остальные параметры, требуемые этими нодами – Translation, Scale и Alpha.

Выделите первый нод и на панели и нажмите на кнопку с глазом рядом с


названием параметра Translation, чтобы скрыть его:

С т р а н и ц а 23 | 39
ТЕМА: FIRST PERSON SHOOTER

Точно так же выключите параметр Scale:

Затем выключите параметр Alpha:

В итоге у вас должен получиться вот такой нод:

Теперь проделайте самостоятельно то же самое с остальными двумя нодами:

Теперь выделите первый нод и найдите на панели Details параметр Rotaion


Mode (группа Rotation). Измените его значение на Add to Existing:

С т р а н и ц а 24 | 39
ТЕМА: FIRST PERSON SHOOTER

Проделайте то же самое для остальных двух нодов.

Настройка этого параметра и установка его значения в Add to Existing


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

Теперь нам необходимо указать, какую именно кость будет


трансформировать каждый из нодов. Выделите первый нод и установите для него
значение параметра Bone to Modify в spine_01:

Для второго нода выберите кость spine_02:

Для второго третьего нода выберите кость spine_03:

Теперь соедините все добавленные ноды в единую цепочку (нод Local To


Component добавляется автоматически):

Теперь потяните за вход первого нода Rotation и в появившемся меню


выберите пункт Promote to variable для того, чтобы входной параметр Rotation был
привязан к переменной:

С т р а н и ц а 25 | 39
ТЕМА: FIRST PERSON SHOOTER

Среда UE автоматически создаст новую переменную и даст ей название


«NewVar0». Выделите ее на панели Variables и переименуйте в «AimRotation»:

Теперь подайте значение этой переменной на вход каждого из оставшихся


двух нодов:

Теперь нам необходимо вычислить значение этой переменной, чтобы


реализовать трансформацию костей скелета. Откомпилируйте FPSAnimBlueprint и
перейдите в Event Graph.

С т р а н и ц а 26 | 39
ТЕМА: FIRST PERSON SHOOTER

Найдите в графе в цепочке нодов для обновления анимации нод Sequence:

Данный нод позволяет задать последовательность выполнения отдельных


цепочек графа. В нашем случае, сначала будет выполнена цепочка Then 0, а после
нее цепочка Then 1. Нам необходимо добавить еще одну цепочку, в которой будет
рассчитывать значение переменной AimRotation.

Нажмите на кнопку Add pin, которая расположена на ноде Sequence, чтобы


добавить еще одну последовательность нодов:

Теперь потяните за выход As Player нода Cast To Player и добавьте нод Get
Control Rotation, который позволит нам получить текущий угол поворот
персонажа:

С т р а н и ц а 27 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь потяните за выход Return Value нода Get Control Rotation и


добавьте нод Break Rotator, чтобы выделить по отдельности три составляющий
поворота персонажа:

Теперь добавьте рядом с нодом Break Rotator три нода для работы с
переменными типа float: float – float, float * float и float > float:

С т р а н и ц а 28 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь присоедините к каждому из этих нодов выход Y (Pitch) нода Break


Rotator и задайте необходимые значения для вычитания, умножения и сравнения:

Теперь потяните за выход нода сравнения float > float и добавьте в граф нод
Select Float:

Данный нод позволяет, в зависимости от истинности условия Pick A,


выбрать, как результирующее значение либо вход A (если условие True), либо вход
B (если условие False).

Подсоедините ко входам A и B выходы нужных нодов:

С т р а н и ц а 29 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь нам необходимо разделить значение, поступающее с выхода Return


Value нода Select Float на 3 при помощи нода float / float (делим на три, потому что
у нас трансформируются три кости):

Теперь добавьте на пустом месте графа нод Make Rotator и подключите к


его выходу X (Roll) результат деления на 3:

Нам осталось установить значение переменной AimRotation, записав в нее


результат выполнения нода Make Rotator:

С т р а н и ц а 30 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь соедините выход нода Sequence Then 3 с нодом установки значения


переменной AimRotation (SET AimRotation):

Откомпилируйте FPSAnimBlueprint, сохраните его и закройте окно


редактора. Запустите игру, чтобы убедиться в том, что теперь мы можем
полноценно осматриваться, поворачивая при этом туловище и, соответственно,
автомат:

С т р а н и ц а 31 | 39
ТЕМА: FIRST PERSON SHOOTER

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

В паке AnimStarterPack имеется анимация стрельбы, но, в чистом виде, она


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

Перейдите в папку AnimStartPack, найдите и скопируйте (Ctrl+C) в ней


файл с анимацией Fire_Rifle_Ironsights:

Вставьте копию анимации (Ctrl+V) в папку Blueprints.

Теперь кликните ПКМ по файлу анимации Fire_Rifle_Ironsights и


выпадающем меню выберите пункт Create и в появившемся списке выберите пункт
Create AnimMontage:

С т р а н и ц а 32 | 39
ТЕМА: FIRST PERSON SHOOTER

Назовите созданный монтаж «FireActionMontage»:

Теперь нам необходимо внести небольшие корректировки в Blueprint


анимации. Откройте FPSAnimBlueprint для редактирования.

Кликните дважды ЛКМ по AnimGraph, чтобы открыть его для


редактирования:

С т р а н и ц а 33 | 39
ТЕМА: FIRST PERSON SHOOTER

Перед вами откроется уже знакомая вам цепочка, которую мы


редактировали, когда реализовывали поворот туловища персонажа.

В данной цепочке, выходная анимация диктуется автоматом состояний


Locomotion, текущая анимация с которого по цепочке передается на вход Result
нода Final Animation Pose:

Здесь мы и внесем необходимые изменения!

Кликните ПКМ по пустому месту в графе и найдите и выберите в


появившемся списке нод Slot ‘Default Slot’:

С т р а н и ц а 34 | 39
ТЕМА: FIRST PERSON SHOOTER

Среда UE добавит в граф вот такой нод:

Теперь добавьте этот нод в цепочку перед последним нодом Final Animation
Pose:

Таким образом, анимация, которая задается автоматом состояний


Locomotion, будет комбинироваться с той анимацией, которая задана в слоте
«DefaultSlot».

Откомпилируйте FPSAnimBlueprint, сохраните его и закройте окно


редактора.

С т р а н и ц а 35 | 39
ТЕМА: FIRST PERSON SHOOTER

Запускать анимацию стрельбы мы будем в тот момент, когда происходит


выстрел. Откройте для редактирования Blueprint нашего персонажа Player и
перейдите в Event Graph.

Найдите на графе цепочку обработки события выстрела Fire:

В эту цепочку мы и добавим воспроизведение нужной нам анимации.

Найдите и разорвите связь между нодами SpawnActor Bullet и Delay:

Теперь выделите на панели Components компонент Mesh и перетащите его в


граф:

С т р а н и ц а 36 | 39
ТЕМА: FIRST PERSON SHOOTER

Потяните за выход нода Mesh и добавьте в граф нод Play Montage:

В параметре Montage to Play выберите в раскрывающемся списке созданный


нами ранее монтаж FireActionMontage:

Теперь добавьте добавленный нод Play Montage в цепочку обработки


события Fire:

С т р а н и ц а 37 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь откомпилируйте Player, сохраните его и закройте окно редактора.


Запустите игру, чтобы убедиться в том, что анимация стрельбы успешно
воспроизводится!

Остался лишь один маленький штришок. В спокойном состоянии наш


персонаж сильно уклоняется в сторону, что будет существенно мешать
прицеливанию. Поэтому мы немножко подправим анимацию Idle.

Перейдите в папку AnimStarterPack и найдите в ней анимацию


Idle_Rifle_Ironsights:

Поставьте воспроизведение анимации на паузу и установите ползунок на


самый первый фрейм:

С т р а н и ц а 38 | 39
ТЕМА: FIRST PERSON SHOOTER

Теперь кликните ПКМ по красному ползунку и в выпадающем меню


выберите пункт Remove from frame 1 to frame 190:

На этом работа с персонажем у нас пока окончена. Сохраните анимацию и


протестируйте игру.

Создание игрового мира


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

В проекте имеется папка, которая называется Starter Content. В этой папке


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

Проявите свою фантазию и спроектируйте игровой мир. Использование


ассетов не ограничивается папкой Starter Content! Вы можете искать любые модели
в Интернете или в магазине Epic Games Store.

С т р а н и ц а 39 | 39

Вам также может понравиться