Научная статья на тему 'РАЗРАБОТКА ОСНОВНОГО ФУНКЦИОНАЛА ИГРОВОГО ПРИЛОЖЕНИЯ ДЛЯ ПЕРСОНАЛЬНЫХ КОМПЬЮТЕРОВ С ИСПОЛЬЗОВАНИЕМ UNREAL ENGINE'

РАЗРАБОТКА ОСНОВНОГО ФУНКЦИОНАЛА ИГРОВОГО ПРИЛОЖЕНИЯ ДЛЯ ПЕРСОНАЛЬНЫХ КОМПЬЮТЕРОВ С ИСПОЛЬЗОВАНИЕМ UNREAL ENGINE Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
268
29
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
UNREAL ENGINE 4 / ВИЗУАЛЬНЫЙ БЛОКОВЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ BLUEPRINT / ИГРОВОЙ ДВИЖОК / СКРИПТ / ФУНКЦИОНАЛЬНЫЕ ВОЗМОЖНОСТИ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Буткина Анна Александровна, Кочкаева Юлия Сергеевна, Чуднова Регина Александровна

В статье описана реализация авторами основного функционала, разработанного на игровом движке «Unreal Engine» тестового приложения, предназначенного для запуска на персональных компьютерах. Разработка выполнялась с использованием визуального блокового языка программирования «Blueprint».

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

DEVELOPMENT OF THE MAIN FUNCTIONALITY OF GAMING APPLICATION FOR PERSONAL COMPUTERS USING UNREAL ENGINE

The article describes the authors' implementation of the basic functionality of a test application developed on the game engine Unreal Engine and designed to run on personal computers. The development was performed using the node-based visual programming language Blueprint.

Текст научной работы на тему «РАЗРАБОТКА ОСНОВНОГО ФУНКЦИОНАЛА ИГРОВОГО ПРИЛОЖЕНИЯ ДЛЯ ПЕРСОНАЛЬНЫХ КОМПЬЮТЕРОВ С ИСПОЛЬЗОВАНИЕМ UNREAL ENGINE»

БУТКИНА А. А., КОЧКАЕВА Ю. С., ЧУДНОВА Р. А.

РАЗРАБОТКА ОСНОВНОГО ФУНКЦИОНАЛА ИГРОВОГО ПРИЛОЖЕНИЯ ДЛЯ ПЕРСОНАЛЬНЫХ КОМПЬЮТЕРОВ С ИСПОЛЬЗОВАНИЕМ UNREAL ENGINE

Аннотация. В статье описана реализация авторами основного функционала, разработанного на игровом движке «Unreal Engine» тестового приложения, предназначенного для запуска на персональных компьютерах. Разработка выполнялась с использованием визуального блокового языка программирования «Blueprint».

Ключевые слова: игровой движок, Unreal Engine 4, функциональные возможности, скрипт, визуальный блоковый язык программирования Blueprint.

BUTKINA A. A., KOCHKAREVA YU. S., CHUDNOVA R. A.

DEVELOPMENT OF THE MAIN FUNCTIONALITY OF GAMING APPLICATION FOR PERSONAL COMPUTERS USING UNREAL ENGINE

Abstract. The article describes the authors' implementation of the basic functionality of a test application developed on the game engine Unreal Engine and designed to run on personal computers. The development was performed using the node-based visual programming language Blueprint.

Keywords: game engine, Unreal Engine 4, functionality, script, node-based visual programming language Blueprint.

Введение. В настоящее время наблюдается всё возрастающий интерес разработчиков программного обеспечения к сфере разработки компьютерных игр и других интерактивных развлечений. Главным образом это связано с возросшей популярностью игр во время пандемии в 2020 году, когда игры стали своего рода альтернативой другим видам досуга. Однако многие аналитические источники [1] утверждают, что тенденция к росту популярности видеоигр будет сохраняться и в дальнейшем. Так, в 2021 году объем российского рынка видеоигр достиг 177,4 млрд рублей, показав увеличение по сравнению с соответствующими итогами 2020 года на 9% [2]. Поэтому среди разработчиков приложений всё большую актуальность приобретает изучение основных принципов работы в игровых движках, а также создание приложений в них с применением языков визуального программирования.

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

Для достижения этой цели были поставлены и решены следующие задачи:

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

- рассмотреть особенности использования языков визуального программирования;

- реализовать основные функции разрабатываемого приложения.

Анализ игровых движков. Игровой движок - особый класс программного обеспечения, который используется в качестве среды разработки игровых приложений. Современные разработчики видеоигр чаще всего используют следующие игровые движки: CryEngine, Unity, Unreal Engine. Каждый из них имеет свои особенности, но в тоже время существуют и общие черты, которые позволяют создавать проекты высокого уровня. Авторами были изучены основные принципы работы в каждой из данных сред разработки, а также проведён их сравнительный анализ, основные результаты которого приведены в таблице 1.

Таблица 1

Сравнение игровых движков

CryEngine Unity Unreal Engine

Лицензия Условно-бесплатная Условно-бесплатная Условно-бесплатная

Язык программирования С++ С# С++

Визуальная система программирования Flow Graph Bolt - требуется покупка Blueprint

Внедрение 3D моделей в движок + + +

Библиотека ассетов Маленькая Большая Большая

Оптимизация + - +/-

Кроссплатформенность Windows, PS, XBOX Windows, IOS, Android Windows, IOS, Android, PS, XBOX

Тестирование в реальном времени + + +

Дополнительное ПО для работы - + -

Учебные пособия - + +

Язык интерфейса Английский Английский Английский

Техническая поддержка - + +

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

Unreal Engine. В частности, «Unreal Engine» был выбран авторами благодаря своей доступности (является условно-бесплатным) и большим количеством возможностей, за которые в других движках пришлось бы доплачивать, например, за визуальный блоковый язык программирования «Blueprint», который облегчает и ускоряет процесс написания кода и не требует особых знаний C++, языка программирования, поддерживаемого для написания скриптов в «Unreal Engine». Кроме того, данный движок имеет достаточно большое количество учебных пособий и возможность обратиться в техподдержку по решению возникшей проблемы или за получением дополнительной информации [3].

Следует учитывать, что для полноценной стабильной работы в данной среде разработки на компьютере необходимо выполнение следующих системных требований для операционных систем семейства Windows [4]:

- операционная система: Windows 10 64-bit;

- процессор: Intel или AMD 4 ядра и более, тактовая чистота 2,5 ГГц или выше;

- оперативная память: 8 ГБ;

- видеокарта: совместимая с DirectX 11 или DirectX 12;

- 22 ГБ свободного места на жёстком диске.

Для написания функциональных скриптов программа «Unreal Engine» поддерживает два языка программирования: «С++» и «Blueprint». Для разработки программы авторами было принято решение использовать язык программирования «Blueprint».

Blueprint. «Blueprint» - строго типизированный визуальный скриптовый язык, с помощью которого можно описать логику приложения любой сложности без использования языков программирования. Другими словами, это тот же C++, но в более удобном блочном виде [5]. Главным плюсом такого языка является простота при его использовании. Вместо написания кода предлагается возможность составлять системы из логических блоков. С помощью такой системы можно «собрать» программу любой сложности, главное - понимать основные принципы объектно-ориентированного программирования [6].

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

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

1) Управление игровым персонажем

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

Таким образом, персонаж будет передвигаться вперёд/назад при нажатии на клавиши <^»/<^», а также вправо/влево при нажатии на клавиши «О»/« А». Считывание сигнала с клавиатуры реализовано следующим образом (рис. 2).

f Get Control Rotation

Target self | Return Value (

О InputAxis MoveForvard P.} Is Alive? Do Can?

► — ► In Do Can )

Axis Value 9

I

' Break Rotator

» Rotation X (Roll) О Y (Pitch) О Z (Yaw) »

2b

Make Rotator

О X (Roll) [ÔÔ] О Y (Pitch) [(M)] •> Ï (Yaw)

f Get Forward Vector

» In Rot Return Value I

/ Get Right Vector

» In Rot Return Value '

f Add Movement Input fr

Target | self | •• World Direction 0> Scale Value Force Q

О

Return Value I

<> InputAxis MoveRkjht Ul ГО Is Alive? Do Can?

Do Can ^

Axis Value

V

J Add Movement Input

> o

Target | self | » World Direction ^ Scale Value Force O

Рис. 2. Модуль логики управления главным персонажем.

Для более реалистичного игрового процесса была добавлена возможность вращения камерой с помощью мыши. Вектор X отвечает за поворот влево/вправо, вектор Y - за поворот вверх/вниз. В данном случае нам нужно получать текущие значения осей мыши и вращать камеру в зависимости от её движения (рис. 3).

Input Ax is Turn cT 1 A Is Alive? Do Can? J Add Controller Yaw Input

) — t In Do Can t

Axis Value

<0 Input Axis LookUp Is Alive? Do Can? J Add Controller Pitch Input

t - ^ In Do Can t Axis Value®» ✓------

4.

* О

щ^^^^я О Target | self

Sence •> " Add pin + \ ф, Val

Рис. 3. Модуль логики управления камерой.

Для бега и передвижения персонажа в положении «полуприсед» авторами были реализованы отдельные модули логики (рис. 4, 5). Основная логика построения блоковой системы для функции «бег» состоит в следующем: изначально необходимо определить, какова скорость персонажа. Далее, при нажатии и удерживании любой клавиши Shift, задаётся значение скорости бега/шага персонажа путём прибавления/вычитания ускорения к полученному на предыдущем шаге результату. Передвижение в положении «полуприсед» происходит после получения сигнала о смене положения персонажа, т.е. после нажатия на клавишу C, при этом скорость передвижения самого персонажа становится медленнее.

Input Act ion Run

"^5'ls Alive? Do Can?

Pressed ^ — ) In Do Can »

Released ^ _ «re-;—rr—, _ _—~-

\ Ols Alive? Do Can?

Key \

»Ш

Do Can ^

Character Movement

Target Max Walk Speed 4 Acceleration •>

-ф •> •> + Add pin +

•<-

•> -

/

SET

Max Walk Speed Target

SET

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

__Max Walk Speed

Target

О о

О о«

Character Movement

Рис. 4. Модуль логики, отвечающий за быстрое передвижение персонажа.

InputAction SrtDown

Pressed Э - ^ In Released [> Key

"Ф Is Alive? Do Can?

Character Movement

Target Max Walk Speed •> —

Slowing I

-» л

г ■» -•> + Add pin +

f Crouch / / D

> » •> Max Walk Speed o

Target | self | f 1 • Target

J

J Un Crouch / / 0

» » •> Max Walk Speed О

О1 Target \ self | / •< Target

Рис. 5. Модуль логики, отвечающий за передвижение персонажа в положении «полуприсед».

2) Виджет шкал жизненных показателей

Для визуального представления специальных численных показателей «Выносливость» и «Рассудок», реализуемых в тестовом игровом приложении, авторами используется виджет. Виджет (widget) представляет собой элемент графического интерфейса пользователя, используемый в программе «Unreal Engine» для создания человеко-машинного интерфейса программы. Для этого первоначально создаётся дизайн виджета, в который добавляются все необходимые компоненты из встроенных в игровой движок элементов, например, «Полоса прогресса», «Текстовое поле» и т.п. (рис. 6). Далее с помощью языка «Blueprint» реализуется логика работы виджета, т.е. добавляются отклики на определённые действия (рис. 7-9). На заключительном этапе устанавливается событие, позволяющее игроку открыть определённый виджет в процессе работы приложения (рис. 10).

"¡в Hierarchy

J |TPWidget]

J H [Canvas Panel] d «

JO [Border] rf1 <ac

J I [Vertical Box] J1

J EH [Horizontal Box] tf ®

J ED [Horizontal Box] > 9.

S [Text] 'Рассудок' J1 <£•

* a [overlay] d <S>

ei'SamtyPB J «■

J [ [HorizontalBox_411] d1 «

Ш [Sanity] "0" J ®

В [Text] V

T iMaxSanily] "0" tf ®

[Spacer] ®

J EI] [Horizontal Box] J1 <£•

J is [Horizontal Box] d <S>

S [Text] 'Выносливость' J «

л Ш [Overlay] d «

eZ'EndurancePB J ®

J ЕЮ [Horizontal Box]

T lEndurance] Э' tf Ф

Ш [Text] 7" rf1 <ac

0 |MaxEndurance] "0 - J'

Рассудок Выносливость

0/0 0/0

Width Щ д Height

Рис. 6. Создание интерфейса виджета «Шкалы жизненных показателей».

.■ . ¿о,

О Event Tick >?

My Geometry In Delta Time О

f Get Player Character

O Player Index [o] Return Value • *. .. . i ■ . . , , j___ sdj

«-» Cast To ThirdPersonCharaeter

Object As Third Person Character !

Success

Target Stats »

Max Sanity

Sanity "7 SetText (Text)

/ SetText (Text)

/ Get Stats

' » » '

' ф- Target Max Sanity +

Sanity +

Sanity Progress Bar J

Max Endurance + ,

Endurance + ,

Endurance Progress Bar ,

1 j Set Percent / SetText (Text)

Target js Progress

1 » » - » » ,

Э- Target Target

' #> In Percent / » In Text l-- - У

7 Set Percent

rafflet is Progress Bar

' » 0

Target

i ♦ In Percent

Рис. 7. Модуль логики передачи значений жизненных показателей в виджете «Шкалы жизненных показателей».

Max Sanity <

Truncate

Sanity 9k ^ /Truncate

f ToText (integer)

#> Value Return Value I ▼

f ToText (integer)

0 Value Return Value I

I Get Stats

Sanity » f Normalize to Range

♦ Value Return Value J

Max Sanity Ф- & Range M;„ •• Range Max

Max Endurance i

"Truncate f ToText (integer)

> A Return Value • — ♦ Value Return Value (

Endurance •> I Truncate

A Return Value 4

f ToText (integer)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Ф Value Return Value Ф

Endurance » / Normalize to Range

♦ Value Return Value \

Max Endurance ç> Range Min |(M)|

Range Max

Max Sanity Sanity

Sanity Progress Bar Max Endurance Endurance

Endurance Progress Bar

Рис. 8. Модуль логики получения значений жизненных показателей.

в Set Stats

»

Max Sanity •> Sanity •> Max Endurance •• Endurance 9'

SET

•> Max Sanity

ri

SET

■ Sanity

О

SET

Max Endurance

О

SET

Endurance

D о

Рис. 9. Модуль логики записи значений жизненных показателей.

J Add to Viewport —

[ГО Event BeginPlay Tfl 5 Create Main Widget Widget

► — » Class Main Widget ■w Owning Player » Return Value Target js User Widget

► c> # Target ▼

Рис. 10. Настраиваемое событие для виджета «Шкалы жизненных показателей».

3) Отображение жизненных показателей главного персонажа

Во многих играх выносливость персонажа зависит от скорости прохождения уровней, причём под скоростью подразумевается скорость шага/бега персонажа. Так в разрабатываемом тестовом приложении при передвижении персонажа в режиме «бег» теряется выносливость. Когда её количество достигает отметки «0», персонаж перестаёт передвигаться в режиме «бег». Количество выносливости автоматически восстанавливается при условии, если персонаж передвигается обычным шагом (рис. 11).

Рис. 11. Модуль логики для реализации игрового механизма «выносливость».

Принцип работы механизма «рассудок» в рассматриваемом приложении аналогичен механизму «здоровье» персонажа в подобных игровых программах. Была реализована следующая логика рассматриваемой опции: после столкновения персонажа с неигровыми персонажами (получение урона) значение рассудка снижается (рис. 12), в случае достижения шкалой «рассудок» отметки «0» - персонаж погибает (рис. 13).

lil\ ürpiJi'jiir^JLiiJO'jrb \)l\WJ

f Select Float

О' A | 0,0 ] Return Value I

_

Рис. 12. Модуль логики для нанесения урона персонажу.

О Death f

Custom Event Ш!"^

SET

Is Dead? 0

О

Sanity •> -

О 0,0

NOT

•C Branch

AND

Add pin + U ► True ► ■

/ Condition False [> I

O Event Tick^Q^^^^^^^H^^^^^^fl „ J

Delta Seconds O I

о Death

1 » О

О Target [sei s 1

Рис. 13. Модуль логики вызова события смерти персонажа.

Мёртвый персонаж не может совершать каких-либо действий, поэтому авторами была создана функция для предотвращения таких ситуаций. Данная функция проверяет состояние персонажа и в случае его смерти блокирует любые его движения (рис. 14).

Inputs

Target Is Dead?

Branch В Outputs

» True О ^ \ Do Can

Condition False ф

Рис. 14 Модуль логики блокировки любых действий персонажа в случае его смерти.

4) Разрушение объектов

Иногда пользователю необходимо будет найти определённые предметы в реализуемом приложении для дальнейшей работы в нём. Для усложнения поиска данные предметы будут спрятаны внутри других, например, в вазе. Чтобы достать их, персонаж должен разбить данную вазу или, другими словами, разрушить объект.

Чтобы при взаимодействии с определённым объектом главный герой мог его разрушить, первоначально потребовалось создать и настроить разрушаемый объект (рис. 15, красным прямоугольником обозначен триггер разрушения объекта, жёлтым прямоугольником - количество частей, на которые распадётся объект при столкновении). Далее авторами была реализована логика, позволяющая объекту, разрушится при взаимодействии с персонажем (рис. 16).

Л

Destructible Settings Chunk Parameters

a Damage

Damage Threshold В °

Damage Spread

Enable Impact Damage □ *

Impact Damage

Default Impact Damage Depth

Custom Impact Resistance ■

чг

Fracture Settings

л Voronoi

I Cell Site Count

0 General

Рис. 15. Создание и настройка разрушаемого объекта.

O Event Hit □ »

My Comp O Other •> Other Comp C> Self Moved Hit Location #> Hit Normal O» Normal Impulse O» Hit

Cast To DestructibleActor

' » » ■

•< Object Cast Failed [>

As Destructible Actor #>

Target Destructible Component

f Apply Radius Damage

' » О

Target

0> Base Damage | 50,01

, Hurt Origin

O Damage Radius | 30,0 |

O' Impulse Strength | 0,01

Full Damage Q

Рис. 16. Модуль логики разрушения объекта при столкновении с главным персонажем.

Заключение. Все задачи, поставленные в рамках данного исследования, были решены. Результатом работы является разработанное тестовое игровое приложение с описанным функционалом, позволившее в процессе своей реализации изучить основные принципы работы в игровом движке «Unreal Engine», а также особенности программирования на визуальном языке программирования «Blueprint».

СПИСОК ЛИТЕРАТУРЫ

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

1. Объемы игрового рынка в 2022 году могут превысить 200 млрд долларов [Электронный ресурс]. - Режим доступа: https://club.dns-shop.ru/digest/obemyi-igrovogo-ryinka-v-2022-godu-mogut-prevyisit-200-mlrd-dolla/ (дата обращения: 02.11.2022).

2. Компьютерные и видеоигры (российский рынок) [Электронный ресурс]. - Режим доступа:https://www.tadviser.ru/index.php/Статья:Компьютерные_и_видеоигры_(ро ссийский_рынок) (дата обращения: 02.11.2022).

3. 5 лучших программ для создания собственной игры [Электронный ресурс]. -Режим доступа: https://geeker.ru/games/programmy-dlya-sozdaniya-igr (дата обращения: 02.11.2022).

4. Hardware and Software Specifications [Электронный ресурс]. - Режим доступа: https://docs.unrealengine.eom/4.27/RecommendedSpecifications/ (дата обращения: 02.11.2022).

5. Unreal Engine 4 [Электронный ресурс]. - Режим доступа: https://habr.com/ru/post/249965/ (дата обращения: 02.11.2022).

6. Основные приёмы Blueprint-программирования [Электронный ресурс]. - Режим доступа: https://it-cube48.ru/основные-приёмы-blueprint-программирования/ (дата обращения: 02.11.2022).

i Надоели баннеры? Вы всегда можете отключить рекламу.