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

GAME DEVELOPMENT

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

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


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

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

После того, как вы открыли проект, выданный преподавателем, необходимо


создать несколько в корневом каталоге Content.

Создайте в Content две папки: Blueprints (здесь будут храниться наши


скрипты) и UI (здесь будут храниться различные элементы интерфейса
пользователя):

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


имеются папки Anim Starter Pack (пак, который содержит модель манекена с
набором анимаций в стиле FPS), FPS_Weapon_Bundle (пак, который содержит ряд
реалистичных моделей оружия) и Starter Content (набор различных стандартных
геометрических примитивов и материалов)

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

Создание персонажа
Теперь приступим к созданию персонажа, которым игрок будет управлять.
Перейдите в папку Blueprints и создайте там новый Blueprint типа Character:

Назовите созданный Blueprint «Player»:

Откройте Player дважды кликнув по нему ЛКМ. Вы можете увидеть, что


Blueprint типа Character уже имеет некоторую базовую структуру компонентов.

Выберите на панели Components компонент Mesh:

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

На панели Details справа найдите параметр Mesh:

Кликните по выпадающему списку и выберите в нем модель SK_Mannequin.


Вы можете увидеть, что манекен теперь отображается во Viewport:

Теперь мы его немножко настроим. Мы развернем наш манекен, чтобы он


смотрел в одном направлении со стрелкой ArrowComponent и опустим ниже по оси
Z, чтобы он более правильно и точно помещался в капсуле.
С т р а н и ц а 4 | 44
ТЕМА: FIRST PERSON SHOOTER

Для этого установите следующие значения в группе параметров Transform:

Теперь мы можем видеть, что наш манекен расположен правильно:

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


Выделите компонент Mesh на панели Content Browser, нажмите на кнопку Add
Component и добавьте компонент Camera:

Обратите внимание, что компонент Camera должен быть дочерним по


отношению к компоненту Mesh!

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

Теперь нам необходимо задать положение для камеры. Выделите компонент


Camera на панели Content Browser и на панели Details найдите параметр Sockets:

Сейчас мы привяжем нашу камеру к голове манекена. Для этого нажмите на


значок поиска рядом с полем, в котором написано None и в появившемся списке
выберите кость «head»:

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

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

Необходимо ее немножко подкорректировать. Для этого зададите такие


значения для параметра Transform:

В итоге камера должна стать так, как это показано ниже на скриншоте:

Теперь мы немножко «оживим» наш манекен. Выберите компонент Mesh на


панели Components и найдите справа на панели Details параметр Animation:
С т р а н и ц а 7 | 44
ТЕМА: FIRST PERSON SHOOTER

Измените значение параметра Animation Mode на Use Animation Asset:

Теперь измените значение параметра Anim to Play, выбрав в выпадающем


списке анимацию Idle_Rifle_Ironsights. Вы можете увидеть, что манекен «ожил» и
стоит, как будто, с оружием в руках:

Но камера теперь слишком наклонена вниз. Чуть позже она будет нуждаться
в корректировке. Пока мы ее оставим такой, какая она есть.
С т р а н и ц а 8 | 44
ТЕМА: FIRST PERSON SHOOTER

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

Создание и настройка GameMode


Теперь необходимо указать среде UE, что наш Player является игроком по
умолчанию. Для этого, как вы помните из предыдущих занятий, нам необходимо
создать свою реализацию GameMode.

В папке Blueprints создайте новый Blueprint типа Game Mode Base и


назовите его «FPS_GameMode»:

Откройте FPS_GameMode и установите значение параметра Default Pawn


Class в Player:

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

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

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

Откройте вкладку World Settings и задайте для параметра GameMode


Override значение FPS_GameMode:

Теперь найдите на уровне компонент Player Start и переместите его,


примерно, в такую позицию, как показано на скриншоте ниже:

Теперь давайте запустим нашу игру:

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

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


небольшие проблемы с камерой, ее необходимо подкорректировать.

Откройте Player и выделите на панели Components компонент Camera.


Задайте для параметров группы Transform, примерно, такие значения:

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

Теперь запустите игру, чтобы убедиться в том, что с камерой все в порядке!

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

Управление персонажем
Теперь мы приступим к реализации управления персонажем! В шутерах
обычно персонаж передвигается при помощи клавиш W, A, S, D, при помощи
мышки осуществляется обзор игрового мира. Такой же принцип управления
персонажем мы реализуем в нашей игре!

Откройте меню Edit и выберите в нем пункт Project Settings, чтобы перейти
к настройкам проекта:

Найдите настройку ввода Input, которая находится в параметрах группы


Engine и откройте ее:

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

Теперь нам необходимо настроить привязки (Bindings). Нажмите на плюсик


рядом с группой Axis Mappings и добавьте новую привязку. Назовите ее
«MoveForward»:

Раскройте созданную привязку. Нажмите на выпадающий список. Найдите и


выберите в нем в группе Keyboard клавишу W:

Теперь мы добавим еще одну клавишу в эту же привязку. Нажмите на


плюсик рядом с MoveForward и установите в добавленной привязке клавишу S:

Для клавиши S установите значение параметра Scale в -1:

Теперь попробуйте самостоятельно добавить подобную привязку для


движения персонажа влево-вправо. Для этого создайте новую привязку в Axis
Mappings и назовите ее «MoveRight». Добавьте в нее две клавиши – A и D. Для
клавиши A измените значение Scale на -1. В конечном итоге у вас должна получится
вот такая привязка:

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

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

В Axis Mappings добавьте еще одну привязку и дайте ей название


«LookHorizontal»:

Установите для этой привязки значение в выпадающем списке Mouse X:

Теперь добавьте еще одну привязку в Axis Mappings и назовите ее


«LookVertical»:

Установите для этой привязки значение в выпадающем списке Mouse Y:

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

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

Все, с привязками мы закончили! Теперь закройте окно настроек проекта и


откройте Player для редактирования.

Перейдите во вкладку Event Graph, где будет располагаться наш скрипт для
персонажа.

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


MoveForward из группы Axis Events:

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

Среда UE автоматически добавим начальный нод обработки события


MoveForward.

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


Add Movement Input, который позволит нам переместить персонажа:

Для данного нода нам необходимо настроить два входных параметра – World
Direction и Scale Value. Нод получает вектор World Direction и умножает его на
значение Scale Value. За счет этого и реализуется перемещение.

Входной параметр Scale Value мы получим из выхода Axis Value нода


события MoveForward:

Для получения вектора мы воспользуемся нодом Get Actor Forward Vector:

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

Обратите внимание, что, если пользователь нажимает клавишу W, то вектор


будет умножаться на значение 1, если же пользователь нажимает клавишу S, то
вектор будет умножаться на значение -1 (мы задавали это значение в параметре
Scale при создании привязок), а если пользовать вообще не нажимает ни W ни S, то
значение Axis Value будет равно 0 и, соответственно, движение вообще не будет
осуществляться.

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

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

Данное событие мы обработаем точно так же лишь с той разницей, что для
получения вектора мы будем вызывать нод Get Actor Right Vector:

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


игру. Теперь персонаж должен реагировать на клавиши W, A, S, D и перемещаться
соответствующим образом!

Теперь нам необходимо добавить возможность игроку осматриваться при


помощи мышки.

Откройте еще раз Player и перейдите во вкладку Event Graph. Кликните


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

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

Для того, чтобы осматриваться, добавьте в цепочку обработки собятия


LookHorizontal, ко входному ноду события, нод Add Controller Yaw Input:

В качестве входного параметра Val для нода Add Controller Yaw Input, мы
подключим Axis Value:

Теперь нам осталось добавить возможность осматриваться вверх-вниз.


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

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

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


Controller Pitch Input:

Если мы сейчас подключим напрямую Axis Value к Val, то управление


получится инвертированным. Поэтому, мы сначала умножим Axis Value на -1, а
потом уже подключим результат умножения ко входу Val:

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


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

Запустите игру и попробуйте осмотреться. Вы можете заметить, что мы не


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

Откройте Player и выделите на панели Components компонент Camera.


Справа на панели Details найдите группу параметров Camera Options и поставьте
галочку напротив параметра Use Pawn Control Rotation:

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

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


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

Попробуйте самостоятельно по своему вкусу отрегулировать положение


камеры, меняя значения параметров Location и Rotation для компонента Camera в
Player!

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

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

Перейдите в папку Blueprints и создайте в ней новый BP типа Actor. Назовите


созданный BP «Weapon_Base»:

Откройте созданный Weapon_Base для редактирования.

Начнем с проектирования структуры, с добавления компонентов. Сначала


добавьте уже знакомый нам компонент Box Collision:

Внутри капсулы должна находиться сама модель оружия. Выделите


компонент Box и, после этого, добавьте новый компонент Skeletal Mesh:

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

Обратите внимание, что компонент SkeletalMesh должен быть дочерним по


отношению к компоненту Box!

Теперь на панели Variables добавьте ряд переменных типа Float:

Необходимо добавить такие переменные:

FireRate – скорострельность (временной промежуток между двумя


выстрелами);

AmmoCount – количество патронов в одной обойме;

ClipsCount – количество обойм;

Damage – урон, наносимый одним попаданием;

После этого откомпилируйте Weapon_Base, сохраните его и закройте окно


редактора.

Теперь мы создадим более конкретное оружие. Кликните ПКМ по


Weapon_Base и выберите в выпадающем меню пункт Create Child Blueprint Class.
Назовите созданного наследника «Rifle_AK47»:

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

Откройте созданный BP для редактирования.

Выберите на панели Components компонент SkeletalMesh:

Теперь найдите на панели Details параметр SkeletalMesh и установите для


него значение SK_KA47 (выберите в выпадающем списке соответствующую
модель):

Выделите компонент Box и найдите на панели Details параметр Box Extent


(группа Shape). Установите для него примерно такие значения:

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

Теперь мы смогли добиться оптимального результата:

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

Прикрепление оружия к персонажу


Теперь созданное оружие необходимо прикрепить к персонажу. Откройте
Blueprints персонажа Player. На панели Variables добавьте новую переменную и
назовите ее «Weapon»:

На панели Details измените тип переменной на Weapon_Base Object


Reference:

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

В этой переменной будет храниться то оружие, которое прикреплено на


данный момент к персонажу.

Теперь на панели Functions добавьте новую функцию и назовите ее


«AttachWeapon»:

Эта функция будет получать на вход оружие и прикреплять его к персонажу.


Сначала добавим и настроим входной параметр функции.

Выделите входной нод Attach Weapon и справа на панели Details в группе


Inputs добавьте новый входной параметр и назовите его «Weapon»:

Теперь поменяйте тип данных для параметра Weapon с Boolean на


Weapon_Base Object Reference (ссылка на объект типа Weapon_Base):

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

Теперь приступим к реализации функции. Первым делом мы проверим, а не


передали ли нам в функцию оружие, которое является «пустым» (пустая ссылка)
при помощи нода Is Valid и нода ветвления Branch:

Теперь потяните за выход Weapon нода Attach Weapon, отпустите ЛКМ на


пустом месте в графе и в появившемся списке найдите и добавьте нод
AttachToComponent (SkeletalMesh):

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

На данный момент у вас должна получиться такая цепочка нодов:

Нод AttachToComponent прикрепляет компонент Target к компоненту


Parent. В качестве Parent мы подключим к этому входу компонент Mesh.

Выделите этот компонент на панели Components и перетащите его в граф,


соединив его со входом Parent:

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

Теперь соедините выход True нода Branch с нодом AttachToComponent,


чтобы они организовали единую цепочку:

Теперь осталось лишь записать прикрепленное оружие в переменную


Weapon:

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

Теперь перейдите во вкладку Event Graph и найдите там нод Event


BeginPlay (событие, которое вызывается на старте игры):

На старте игры мы создадим наш автомат и прикрепим его к персонажу. Для


этого мы добавим после нода Event BeginPlay уже знакомый нам нод Spawn Actor
From Class:

Теперь измените значение параметра Class на Rifle_AK47. После этого


потяните за вход Spawn Transform и выберите в появившемся меню пункт Make
Transform для добавления соответствующего нода:

Теперь потяните за выход Return Value нода SpawnActor Riffle AK47 и


добавьте в граф нод Attach Weapon:
С т р а н и ц а 30 | 44
ТЕМА: FIRST PERSON SHOOTER

Таким образом мы на старте игры прикрепим автомат к персонажу.

Теперь перейдите опять к функции AttachWeapon. Обратите внимание, что в


ноде AttachToComponent мы оставили пустым значение входного параметра Socket
Name:

Этот параметр задает, к какому конкретно сокету скелета модели будет


прикреплен компонент.

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


AnimStarterPack, затем в папку UE4_Mannequin и затем в папку Mesh. Откройте
UE4_Mannequin_Skeleton:

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

В открывшемся окне редактора вы можете видеть наш манекен. На панели


слева вы можете увидеть иерархическую структуру костей скелета модели. Вот с
этой структурой мы и поработаем:

Прикреплять оружие мы будем к правой руке нашего персонажа. Найдите на


панели Options кость hand_r и выделите ее:

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

Кликните на ней ПКМ и в выпадающем меню выберите пункт Add Socket:

В результате мы создадим сокет, который будет потомком hand_r.

На панели Details справа переименуйте созданный сокет в «weaponSocket»:

Теперь выделите weaponSocket на панели Options:

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

Кликните по нему ПКМ и в выпадающем меню перейдите в пункт Add


Preview Asset и выберите там модель нашего автомата SK_KA47:

Теперь на месте сокета weaponSocket отображается модель нашего автомата:

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

Мы сделали это для того, чтобы настроить параметры сокета weaponSocket


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

Теперь самостоятельно манипулируя углом поворота (Rotation) и


местоположением (Location) сокета установите оптимальные параметры, чтобы
манекен держал автомат корректно:

Теперь перейдите в Player, откройте функцию AttachWeapon и для входного


параметра Socket Name нода AttachToComponent задайте значение weaponSocket:

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

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


создается и прикрепляется к персонажу!

Но есть один минус. Положение автомата явно не совсем корректно.

Для того, чтобы более точно отрегулировать положение оружия перейдите в


UE4_Mannequin_Skeleton. Найдите вверху в меню пункт Preview Animation и
выберите в нем анимацию Idle_Rifle_Ironsights:

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

Манекен теперь будет воспроизводить анимацию, в которой он находится в


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

Теперь, манипулируя местоположением сокета weaponSocket и его углом


поворота добейтесь максимально оптимального положения для автомата:

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


Player и отрегулируйте местоположение и угол поворота компонента Camera по
своему вкусу!

Создание патрона. Реализация стрельбы


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

Начнем с создания BP для патрона. Перейдите в папку Blueprints и создайте


там новый BP типа Actor. Назовите его «Bullet»:

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

Теперь откройте созданный Bullet для редактирования.

Первым делом мы добавим все необходимые компоненты. Нажмите на


кнопку Add Component и добавьте компонент типа Box Collision:

Теперь выделите добавленный компонент и добавьте для него дочерний


компонент типа StaticMesh:

После этого добавьте компонент типа ProjectileMovement, который позволит


имитировать полет пули. В конечном итоге у вас должна получиться такая
структура Bullet:
С т р а н и ц а 38 | 44
ТЕМА: FIRST PERSON SHOOTER

Теперь настроим добавленные компоненты. Выделите компонент


StaticMesh. Найдите на панели Details параметр StaticMesh:

Нажмите на выпадающий список и найдите там модель SM_Shell_45ap:

Эту модель мы немножко увеличим и повернем. Задайте для компонента


StaticMesh такие значения параметров Scale и Rotation:

Теперь выделите компонент Box. Найдите для него параметр Box Extent
(группа параметров Shape) и установите для него такие значения:

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

В итоге ваша пуля должна выглядеть примерно так:

Теперь осталось настроить компонент ProjectileMovement. Выделите его и


задайте на панели Details такие значения группы параметров Projectile:

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

Теперь нам необходимо настроить взаимодействие с пользователем. Игрок


будет стрелять по нажатию на ЛКМ, как это обычно и происходит в шутерах.

Перейдите в настройки проекта (Edit-Project Settings) и найдите там


настройки ввода (Input в группе Engine):

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

Нажмите на плюсик рядом с Action Mappings, чтобы добавить новую


привязку. Назовите ее «FireAction»:

Теперь нажмите на выпадающий список под названием привязки и выберите


в нем «Left Mouse Button»:

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


обработать!

Откройте BP нашего персонажа Player. Кликните ПКМ по пустому месту в


графе, найдите и добавьте нод события FireAction:

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

По нажатию на ЛКМ нам нужно генерировать пулю. Поэтому, для события


FireAction мы добавим в первую очередь нод Spawn Actor From Class:

Установите значение параметра Class для этого нода в Bullet:

Теперь нам необходимо вычислить местоположение и угол поворота пули.


Сделать это очень просто! Если открыть скелетон модели нашего автомата, то мы
С т р а н и ц а 42 | 44
ТЕМА: FIRST PERSON SHOOTER

увидим, что он содержит отдельный сокет Muzzle, который находится рядом с


дулом:

Мы возьмем трансформацию этого сокета и передадим ее ноду Spawn Actor


From Class для пули.

Нам необходимо из текущего оружия (хранится в переменной Weapon)


получить саму модель оружия и уже для этой модели вызвать нод Get Socket
Transform, который вернет нам трансформацию для конкретного сокета.

Для этого добавьте вот такую цепочку нодов:

Для нода Get Socket Transform установите значение параметра In Socket


Name в «Muzzle»:

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

Теперь запустите игру и убедитесь в том, что теперь мы можем успешно


стрелять из нашего автомата!

Нужно больше оружия

Нам необходимо из текущего оружия (хранится в переменной Weapon)


получить саму модель оружия и уже для этой модели вызвать нод Get Socket
Transform, который вернет нам трансформацию для конкретного сокета.

С т р а н и ц а 44 | 44

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