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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

МЕХАНИКО-МАТЕМАТИЧЕСКИЙ ФАКУЛЬТЕТ

Кафедра веб-технологий и компьютерного моделирования

КОЗАК
Дмитрий Владимирович

РАЗРАБОТКА ИГРОВОГО ПРИЛОЖЕНИЯ В


МЕЖПЛАТФОРМЕННОЙ СРЕДЕ UNITY

Дипломная работа

Научный руководитель:
старший преподаватель
Политаев Дмитрий
Николаевич

Допущен к защите
«___»___________2020 г.
Зав. кафедрой веб-программирования и компьютерного моделирования
Доктор физ.-мат. наук, профессор В.М.Волков

Минск, 2021

1
СОДЕРЖАНИЕ

Введение.........................................................................................................3
ГЛАВА 1........................................................................................................5
ПОСТАНОВКА ЗАДАЧ...............................................................................5
1.1 Описание предметной области..........................................................5
1.2 Модель предметной области..............................................................5
1.3 Анализ существующих аналогов.......................................................6
1.4 Функциональная модель игры...........................................................7
ГЛАВА 2........................................................................................................8
ОБЗОР ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ, ИСПОЛЬЗУЕМЫХ ПРИ
СОЗДАНИИ ИГРОВОГО ПРИЛОЖЕНИЯ................................................8
2.1 Задачи, решаемые при разработке компьютерной игры.................8
2.2 Движки игр..........................................................................................8
2.3 Выбор и обоснование движка............................................................9
ГЛАВА 3......................................................................................................10
ПРАКТИЧЕСКАЯ ЧАСТЬ.........................................................................13
3.1 Описание Unity..................................................................................13
3.2 Разработка компьютерной игры......................................................15
3.3 Разработка дизайна...........................................................................18
ГЛАВА 4......................................................................................................20
ОПИСАНИЕ ИГРЫ.....................................................................................20
4.1 Программно-аппаратные ресурсы...................................................20
4.2 Демонстративный пример работы игры.........................................20
4.3 Тестирование.....................................................................................23
ЗАКЛЮЧЕНИЕ...........................................................................................25
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ:.................................26
ПРИЛОЖЕНИЕ А.......................................................................................27

2
ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ

Пинг – задержка отклика между устройствами

Префаб – это тип объекта, который можно сохранить и в последующем


упрощённо создавать его копии.

Ассет – набор различных вещей из AssetStore, может называться как


единичный экземпляр чего либо, так и группа.

Матчмейкинг – система автоматического подбора игроков друг для друга.

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

3
РЕФЕРАТ

Дипломная работа, 37 стр., 19 рис., 1 таблица, 5 источников, 1


приложение.

Ключевые слова: ИГРА, МУЛЬТИПЛЕЕР, UNITY, ПОЛЬЗОВАТЕЛЬ


Объект исследования – Использование игрового движка для разработки
игрового развлечения
Цель работы – создание веб-приложения для студентов, содержащего все
необходимые инструменты для обучения.
Методы исследования – изучение предметной области, анализ
существующих решений, создание функциональной модели, изучение
технологии разработки игр.
Результатом является развлекательная программа, представленная в
виде компьютерной игры
Область применения: Игра может быть использована для развлечения и
снятия стресса

4
РЕФЕРАТ

Дыпломная праца, 37 стр., 19 мал., 1 табліца, 5 крыніц, 1 прыкладанне.

Ключавыя словы: гуляй, мультыплэер, UNITY, Карыстальнік

Аб'ект даследавання - Выкарыстанне гульнявога рухавічка для распрацоўкі


гульнявога забавы

Мэта работы - стварэнне вэб-прыкладанні для студэнтаў, які змяшчае ўсе


неабходныя прылады для навучання.

Метады даследавання - вывучэнне прадметнай вобласці, аналіз існуючых


рашэнняў, стварэнне функцыянальнай мадэлі, вывучэнне тэхналогіі
распрацоўкі гульняў.

Вынікам з'яўляецца забаўляльная праграма, прадстаўленая ў выглядзе


кампутарнай гульні

Вобласць ужывання: Гульня можа быць выкарыстана для забавы і зняцця


стрэсу

5
ABSTRACT

Thesis, 37 pages, 19 figures, 1 table, 5 sources, 1 appendix.

Keywords: GAME, MULTIPLAYER, UNITY, USER

Research object - Using a game engine to develop game entertainment

The purpose of the work is to create a web application for students, containing all the
necessary tools for learning.

Research methods - study of the subject area, analysis of existing solutions, creation
of a functional model, study of game development technology.

The result is an entertainment program presented in the form of a computer game

Scope: The game can be used for entertainment and stress relief

6
ВВЕДЕНИЕ
Тема данной дипломной работы – компьютерная игра «Mine&Slay»,
которую можно открыть на любом компьютере.
Данная дипломная работа была выполнена с целью практического
освоения основных приемов и правил создания компьютерных игр средствами
игрового движка Unity.
В текущий день развитие технологий идет стремительно. И помимо
технологий также развиваются и развлечения, а именно – компьютерные игры,
которые уже проникают во многие сферы нашей жизни и пользуются большой
популярностью. И с развитием тех же технологий развилась и техника:
компьютеры и телефоны. И сейчас практически ни одно устройство не
обходится без игр, каких-либо незначительных.
И прямо сейчас множество игр находится в разработке, именно эти игры
представляют собой от простых и изометрических до колоссальных и
крупномасштабных, с огромными бюджетами. Уже сейчас игры – часть нашей
жизни, и с каждым годом они становятся всё больше и сложнее, некоторые же
наоборот – проще и незатейливее. Некоторые игры становятся эталонами
различных жанров, некоторые – настоящими произведениями искусства.
И со временем эта сфера так же втягивает в себя многих людей,
некоторые хотят создавать игры ради себя, некоторые ради денег, но в отличие
от большинства других сфер разработки, многие разработчики создают игры
действительно ради других. Чтобы другой человек почувствовал этот восторг
от прохождения, от красивого сюжета или прекрасного мира игры. Таким
образом в эту сферу был вовлечён и я.
Моя же компьютерная игра предназначена для людей, которые любят
соревновательный элемент и незатейливый геймплей, игру, которую можно
поиграть и в автобусе, и на перемене, и дома.
Цель моей работы – разработка компьютерной игры «Mine&Slay» в
мощном игровом движке для создания игр Unity.
Для выполнения работы были поставлены следующие задачи:
проанализировать предметную область;
составить необходимые схемы, графики для понятия логики и структуры
работы разработки;
проанализировать аналоги игр в зоне интернета;
произвести обзор инструментальных средств, которые будут
использованы при разработке;
разработать компьютерную игру «Mine&Slay»;
произвести тесты на выявление неисправностей и багов.
В исследование вошло:
изучение материалов для реализации своей работы;

7
изучение всевозможных функции игрового движка Unity;
изучение визуального программирования, а также языка
программирования C#.
Практическая значимость моей исследовательской работы заключается в
том, что результаты исследования могут быть использованы в реализации
аналогичных приложений на различных движках и платформах.

8
ГЛАВА 1
ПОСТАНОВКА ЗАДАЧ

1.1 Описание предметной области


Предметной областью называется интерес к исследованию работы,
изучению его частей.
Для создания игры у меня есть множество причин: во-первых, это
интерес самой разработки, во-вторых, изучение движка Unity, который сам по
себе представляет собой удобную платформу для разработки, чрезвычайно
удобным интерфейсом, относительной бесплатностью и хорошим
функционалом
Моя игра представляет собой простое состязание игроков друг с другом,
где они могут развлечься уничтожением других. За простотой является цель –
развлечь.
Мой тип игры включает в систему передвижения, мультиплеера, создания
и присоединения к лобби, соревновательный элемент
Если проанализировать предметную область, можно сказать, что
разработка игры вполне актуальна, хоть и является в некотором роде схожим на
многие проектом, но при этом непохожим и с довольно большим охватом
аудитории.
Цель разработки – научиться делать игры подобного жанра, что поможет
в общем развитии как разработчика и в возможной последующей узнаваемости
ввиду возможного успеха.

1.2 Модель предметной области


Компьютерная игра «Mine&Slay» включает в себя следующий
функционал:
Звуковое оформление.
Изменение настроек со следующими параметрами:
полный экран;
переключение звука;
разрешение;
графика.
Начало игры:
управление движением героя;
ввод имени;
возможность создание лобби;
подключение к лобби;

9
Для разработчика, модель данных поможет увидеть структуру
приложения, понять, как оно должно работать и какие части стоит оставить, а
какие будут не нужны.
Так же для определения всех возможностей игры лучше всего подойдет
логическая модель, так как она поможет визуально связать всё воедино и
понять связь между компонентами, которые в итоге будут собраны в единую
игру -«Mine&Slay».
В итоге была создана логическая модель игры «Mine&Slay», которая
предоставлена ниже (рисунок 1.1.).

Главное меню

Начать игру Переключение


звука
Выход из игры
Подключение к
лобби
Выход из лобби
Создание лобби

Управление
Ввод имени
персонажем

Рисунок 1.1 – Логическая модель игры

1.3 Анализ существующих аналогов


Для начала стоит сказать о истоках мультиплеера как такового. Первой
игрой в данном жанре считается «Tennis for Two», игра 1958 года. Была
тестовой и существовала только на аналоговой ЭВМ.
Первой же действительно многопользовательской игрой считается
Empire, шутер на множество человек в 2D стиле. Тогда же появились первые
классификаций для таких типов игр. Тогда же и появилась такое понятие как
«локальная сеть»: когда несколько компьютеров соединены напрямую или с
помощью Switch.
Со временем игры становились всё более развитыми и сложными,
например сейчас эталоном соревновательных игр является «Call of Duty» и

10
«Battlefield». И сейчас такие игры очень комплексные и наполнены большим
количеством элементов, а моя же игра относится к более упрощённому виду.
Как жанр в текущем его проявлении тяжело определить, можно сказать
лишь что игра принадлежит к так называемым «HYPER-CASUAL» играм, то
есть играм, игровой процесс которых должен быть наиболее простым, но в
тоже время увлекательным.
Игровой процесс игр жанра HYPER-CASUAL в целом вдохновляется
различными играми, и часто многие игры могут сильно отличаться друг от
друга. В текущих реалиях можно попытаться выделить основные моменты
HYPER-CASUAL как жанра и определить наиболее важные особенности:
игровой процесс отличается простотой и удобством;
в игре так же используется особенность «Easy to learn, hard to master»;
если игра предполагает собой мультиплеер, то в этом случае поиск матча
и начало игры должны занимать наименее возможное количество времени;
управление должно включать в себя максимально простое управление;
в игре должны быть персонажи, отличающиеся друг от друга;
короткие игровые сессии.
Из существующих аналогов тяжело выделить каких-либо явных конкурентов,
так как игры данного жанра часто различны, и поэтому у каждого проекта своя
аудитория. Поэтому для игры мало аналогов, с которыми можно её сравнить, и
ещё меньше тех, которые предполагают мультиплеер. Для примера сравнения
можно взять игру BADLANDS, она хоть немного отличается от жанра HYPER-
CASUAL, но это ближайший из аналогов.
При сравнении там и там присутствует мультиплеер, но задачи в
BADLANDS – кооперативные, в «Mine&Slay» – противостояние игроков друг
другу. Тем не менее BADLANDS требует более внимательной игры, она хоть и
простая, но при этом более сложная в итоге. В этом атрибуте «Mine&Slay»
выглядит на порядок лучше, так как можно играть в полу сосредоточенном
состоянии, ведь нужно сказать только направление действия, и игра сделает всё
самостоятельно. Из анализа сделаем вывод, что игра может составить
конкуренцию другим проектам.

11
1.4 Функциональная модель игры
Пользователь приложение имеет выбор, найти случайное лобби или
создать его самому. Также именно он отвечает за управление персонажем и
поведением его в игре.
Для того, чтобы обозначить возможности игры, стоит описать так
называемую диаграмму прецедентов (или называемую Use-Case диаграмму),
что так же позволит понять взаимодействие с пользователем. (рисунок 1.2)

Вход в игру

Нахождение лобби/

Создание лобби

Управление персонажем

Пользователь

Выход
из игры

Рисунок 1.2 – Диаграмма прецедентов игры категории «Пользователь»

12
ГЛАВА 2
ОБЗОР ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ,
ИСПОЛЬЗУЕМЫХ ПРИ СОЗДАНИИ ИГРОВОГО
ПРИЛОЖЕНИЯ

2.1 Задачи, решаемые при разработке компьютерной игры


При подготовке к разработке любого проекта необходимо построить план
его реализации, определить задачи, которые необходимо решить. Конечно, для
реализации больших проектов используется команда разработчиков,
дизайнеров, звукорежиссеров, художников, тестировщиков, но эта работа будет
производиться в учебных целях и поэтому можно поставить для себя
следующие задачи:
1. Определить иерархию проекта
2. Понять сложность проекта, оценить его возможный охват.
3. Выбрать игровой движок
4. Проработать игровой дизайн.
5. Создать звуковое оформление.
6. Реализовать игру.
7. Сделать несколько сцен, после чего объединить их в одну.
8. Протестировать игру.
Сделав выше поставленные задачи, мы получим готовую игру, которую
можно использовать.

2.2 Движки игр


Для начала, чтобы начать разработку, нужно определиться с помощью
чего разрабатывать игру. Для этого есть множество инструментов, однако по
мне лучший из них это игровой движок. Он позволяет очень сильно облегчить
разработку и так же многократно ускорить её.
На самом деле количество движков очень много, и они очень разные сами
по себе, некоторые могут делать что угодно и как угодно, некоторые только в
определённой области. Так же есть возможные модификации уже для игровых
движков, которые улучшают некоторые возможности или сглаживают минусы.
Но для выбора метода разработки лучше выделить самые популярные, так как
зачастую они и самые удобные. Для нас же главное, чтобы движок был
адаптирован для работы в 2D.
И для того, чтобы выбрать игровой движок, были организованы поиски
оных в сети «Интернет», после чего было проведено сравнение их судя по
отзывам и первому впечатлению. Весь результат был приведен в таблице 1.1.

Таблица 1.1 – Сравнение различных движков игр

13
Название Описание Язык Стоимость
Unity Особенность Unity заключается в С# бесплатный,
наличии Drag&Drop интерфейса, платный
позволяющего создавать и тестировать
игру прямо в редакторе, так же из-за
этого скрипты можно прикреплять и
связывать между собой сразу в
редакторе, в отличие от остальных. Так
же имеет множество дополнительных
модулей и плагинов
Unreal Engine 4 Этот движок позволяет создавать C++ бесплатный,
полноценные игры без знания кода с платный
помощью особой интерфейса –
Blueprints. Так же имеет множество
инструментов для отладки и обладает
весьма мощными функциями. Зависит
от чистоты кода, так как является
довольно требовательным.
Game Maker Движок более похожий на конструктор, JavaScript бесплатна
который позволяет работать как с 2D, только до
так и с 3D. Особенность его в том, что публикации.
несмотря на неплохой функционал, всё
довольно просто оформлено и работает.
DXStudio Движок так же, как и предыдущий JavaScript Бесплатный,
позволяет работать сразу и с 2D и 3D. платный
Так же наличие основного языка в виде
Javascript позволяет легко адаптировать
игру под браузеры. Немного можно
сказать о хорошей поддержке новых
шейдеров, позволяя выводить картинку
на новый уровень, однако из-за JS не
сильно хорошо оптимизирован

14
Source Engine Мощный движок для разработки, C++ Бесплатный,
позволяющий очень гибко настраивать платный
различные вещи, особенно работы с
графикой и тенью. Так же из-за
встроенного движка Havok позволяет
работать с физикой на совершенно
новом уровне. Особенность движка так
же наличие удобного конструктора для
движка.

После сравнения некоторых, был сделан вывод, что хоть многие движки и
хороши сами по себе, после того как мы ограничим их своими требованиями, то
здесь гораздо проще выбрать нужный.
2.3 Выбор и обоснование движка
На самом деле движков сейчас огромное множество, однако сейчас,
практически любой человек может это сделать. Но в отличие от тех же
конструкторов, в движках необходимо знание кода для реализации идей. Но
сейчас даже есть различные фреймворки и плагины, позволяющие делать игры
без кода и на движках. Для начала работы с движком лучше всего для начала
познакомится с его особенностями и основными свойствами, так как в
зависимости от движка зависит в большей части то, как будет выглядеть
структура кода и какие функции и возможности будут использоваться в итоге.
Для того, чтобы определить, какой движок использовать, нужно сравнить
всех конкурентов и выделить сильные и слабые стороны.
У Unity есть хорошая адаптация под мобильные устройства и очень
хорошие библиотеки для мультиплеера, поэтому он очень эффективен для нас,
поэтому будем держать как возможный вариант.
Сперва Unreal Engine 4, проблема этого движка в том, что он в
большинстве случаев очень требователен к техническим характеристикам,
следовательно для нашей игры он не подходит, так как у нас игра должна
быть не требовательна сама по себе.
После Game Maker, у него проблема такая же, как и у DxStudio, у этих
обоих движков отсутствуют нормальные возможности реализовать
мультиплеер, это либо будет очень сложно, либо очень неэффективно,
следовательно они нам не подходят.
Остаётся Source Engine для сравнения, и его главная проблема, это
отсутствие возможности нормально реализовать 2D. У него множество
преимуществ в 3D, но для нас это не имеет значения, поэтому он не подходит.
В итоге для разработки компьютерной игры «Mine&Slay» будет
использоваться мощный игровой движок Unity.
15
Unity имеет много преимуществ:
редактор Unity имеет простой Drag&Drop интерфейс, который легко
настраивать, состоящий из различных окон, благодаря чему можно производить
отладку игры прямо в редакторе;
к объектам можно применять коллизии (в Unity т. н. коллайдеры –
collider), которых существует несколько типов. Также Unity поддерживает
физику твёрдых тел и ткани, а также физику типа Ragdoll (тряпичная кукла). В
редакторе имеется система наследования объектов; дочерние объекты будут
повторять все изменения позиции, поворота и масштаба родительского объекта.
Скрипты в редакторе прикрепляются к объектам в виде отдельных
компонентов;
большим плюсом является единая система вызова функции в скриптах,
позволяющая адаптировать всё под определённую систему, что является очень
гибкой системой, которая легко синхронизирует различные процессы на
высоком уровне;
Unity поддерживает систему Level Of Detail (сокр. LOD), суть которой
заключается в том, что на дальнем расстоянии от игрока высоко
детализированные модели заменяются на менее детализированные, и наоборот,
а также систему Occlusion culling;
также как плюс возможность использования Unity Asset Server –
инструментарий для совместной разработки на базе Unity, являющийся
дополнением, добавляющим контроль версий и ряд других серверных решений
и многое другое;
у Unity есть ряд недостатков, такие как медлительность в больших
проектах, что не является проблемой в нашем случае, так как игра в 2D и не
представляет сильно сложной графики или текстур, поэтому минус
нивелируется;
также большим преимуществом является наличие множество библиотек и
плагинов, позволяющих довольно легко расширить функционал игры или
добавить особенные механики, к примеру Photon для мультиплеера, doTween
для анимации и т.д;
В итоге можно сказать, что Unity является очень хорошим инструментом
для реализации игры, которые позволяет реализовать все задумки и подходит
для разработки лучше остальных.

2.4 Обзор возможных решений для мультиплеера


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

16
1. Dynamic Single Player – этот тип может использоваться в любых
играх, необязательно даже онлайновых, так как в основном используется для
различных интеграций, то ли социальных (поделиться чем либо в сети), то ли
геймплейных (онлайн достижения). В нашем случае это не подходит из-за того,
что у нас онлайн игра, в которой нужно подключение игроков, чего данный тип
не обеспечивает.
2. Turned Based Multiplayer – тип, использующийся, как можно судить
по названию, в пошаговых играх. Особенность данного типа в том, что в них
подключение не зависит (в разумных пределах) от задержки, здесь нету таких
механик, вроде «Кто первый нажал, то и победил», так как часто присутствуют
большой набор анимации (Как в «Hearthstone») или ходы передаются по
очереди (Как в «Heroes of Might and Magic»). Так же не подходит, так как игра
требует постоянного нахождения в игре.
3. Persistent Game Spaces – решение, в котором есть одна игровая зона,
в которой находятся абсолютно все игроки, обычно такой способ используется
в MMO проектах, которые предполагают в себе множество игроков, которые
могут взаимодействовать между собой. Очень затратный тип, так как нужно
использовать различные способы оптимизации, делить мир на зоны, сервер на
слои и так далее. Опять же не подходит из-за того, что у нас игровые сессии
короткие, и нам нужно минимум игроков и минимальная карта.
4. Real Time Multiplayer – тип в реальном времени, в котором есть
определённое лобби, где находится заранее определённое количество игроков
(до 5, 10, 15 и т.д.). Игра происходит в реальном времени, где нужно постоянно
следить за игрой и предпринимать какие-либо действия. Здесь часто требуется
реакция, должен учитываться пинг игрока, необходимы различные Гейм-
менеджеры, которые предсказывают поведение вещей в игре, чтобы вовремя
давать отклик и уменьшить задержку. К такому типу относятся практически все
онлайновые соревновательные проекты (как «Dota 2» «LoL» «Counter-Strike» и
другие). Этот тип подходит, т.к. у нас отчасти соревновательная игра, в которой
нужно вовремя реагировать, хоть и не настолько быстро как в типичных
представителей данного решения.
После того как мы определились с решением, нужно определить, какой
тип подключение будет использоваться в игре, и здесь так же есть несколько
вариантов:
1. Прямое соединение – подключение, при котором устройства
подключаются друг к другу напрямую, без каких-либо посредников. В это есть
свои плюсы, такие как отсутствие требования подключение к интернету (По
LAN) и, по сути, бесплатность разработки, но плюсы на это заканчиваются. Из
минусов в тоже же время сложная настройка для хоста (инициатора
подключения), проблемная работа на мобильных устройствах, так как там

17
такой тип подключения практически не работает, невозможность
матчмейкинга, так как данные остаются только у игроков и не отправляются на
сервер, и из-за этого хост получает преимущество, ввиду отсутствия задержки,
и, при плохом соединений у других игровой процесс может стать
невозможным. Так же одним из минусов можно считать то, что игроки могут
читерить, менять файлы по своему усмотрению и получать за это
преимущество.
2. Доверенный сервер – подключение, при котором между
устройствами есть посредник в виде какого-либо серверной части (UNET,
Photon, PUN и так далее). Здесь так же есть хост, который принимает все
сообщение с других серверов, и так же отвечает через сервер остальным. Из
явных преимуществ можно выделить доступность, легко настраивается на
мобильных устройствах и вполне простая настройка, так же здесь можно
настроить матчмейкинг, который стал доступен из-за сервера. Из недостатков
можно выделить небольшое преимущество хоста перед другими, но не такое
явное, как в прямом соединении, так же проблема читерства остается
нерешённой.
3. Полностью контролируемый доверенный сервер – похожее на
прошлый тип подключение, которое имеет те же преимущества, и к тому же в
котором решена проблема читерства, т.к. абсолютно всё проходит через сервер
и отсылается им же, поэтому тем самым обеспечивается полная защита от них.
Так же отсутствует хост как таковой, что позволяет поставить всех в равные
условия. Несмотря на такое большое количество плюсов, есть и пара минусов:
во-первых, код сервера нужно писать полностью самому, что очень сильно
увеличивает время и сложность разработки; во-вторых, сам сервер является
довольно дорогой услугой, если использовать чей-либо (Photon enterprise, AWS
и другие), и ещё более дорогой, если делать свой собственный.
Из всего вышеперечисленного первый вариант не подходит из-за плохой
адаптации под мобильные устройства и отсутствия возможности матчмейкинга.
Третий вариант не подходит ввиду высокой стоимости, и чрезвычайно
высокой сложности написания сервера, которая в игре такого типа попросту не
нужна.
Методом исключения остается второй вариант, который хоть и не
идеален (возможное наличие читеров, преимущество хоста перед другими), но
тем не менее лучшее из возможных. Для реализации данного типа подключения
есть несколько решений, предлагаемых самим движком Unity, а именно Photon,
UNIX и PIN, так же есть и GameLift от Amazon.
Из всех вариантов был выбран фреймворк Photon, так как UNIX
прекращает поддержку в ближайшее время, поэтому при наличии перспектив

18
для игры нецелесообразное решение. PIN и GameLift, в отличие от Photon, не
имеют бесплатных возможностей для реализации сервера.

19
ГЛАВА 3
ПРАКТИЧЕСКАЯ ЧАСТЬ

3.1 Описание Unity


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

Рисунок 3.1 – Ярлык программы Unity

Открываем конструктор с помощью двойного щелчка левой кнопки


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

Рисунок 3.2 – Главное окно программы Unity

Создадим новый проект для начала. В меню программы нажмем «New»


(создастся новый проект). На рисунке 3.3 представлен созданный новый проект.

20
Рисунок 3.3 – Новый созданный проект

Справа имеется «окно», называемое «inspector window», где будут


расположены свойства выделенного объекта. Свойства можно изменять или
добавлять новые.
Слева находится «Hierarchy window», где показывается выбранная сцена
и все находящиеся на ней объекты. В общих чертах напоминает всем известный
проводник. С объектами на сцене можно взаимодействовать: перетаскивать,
выделять, делать дочерними и многое другое.
Снизу расположено «Project window», где находится дерево проекта со
всеми папками, а также более подробное описание выбранной папки со всеми
вложенными файлами.
По центру расположено сама сцена, называемая «Scene view»,
позволяющая ориентироваться на сцене и изменять её. Можно смотреть как в
2D, так и в 3D перспективе.
Вверху расположен «Toolbar», который включает в себя базовые функции
(как, например, переключение между режимами взаимодействия, так и
возможность запустить сцену).
Используя различные объекты, плагины и поведения можно создать
потрясающий функционал игры либо приложения, создать все с нуля,
придумать свою идею, реализовать похожие проекты. Функционал движка
очень разнообразен и позволяет реализовать большинство задумок.

21
3.2 Описание возможностей фрейморка Photon
Photon – фреймворк, который предоставляет большие возможности в
создание мультиплеерных проектов и их поддержке. Он сочетает в себе
небольшую сложность в реализации и эффективность решения в итоге. Так же,
в отличие от множества других фреймворков, у Photon очень гибкая ценовая
политика, позволяющая использовать как бесплатные версии, так и
приобретать более затратные и масштабные варианты. У него само по себе
большое количество плюсов, а именно:
легкое масштабирование сервера, а именно при увеличении количества
игроков Photon без проблем адаптируется;
кроссплатформенность, позволяющая игрокам играть с разных устройств
вместе, что увеличивает охват аудитории;
по сравнению с остальными решениями рабочий матчмейкинг.
Подключение осуществляется с помощью встроенного класса –
PhotonNetwork, который и отвечает за большую часть вещей в данном
фреймворке. По примеру ниже показано подключение к серверу:
//После создания лобби подключаемся к серверу.
PhotonNetwork.AutomaticallySyncScene = true;
PhotonNetwork.GameVersion = "1";
PhotonNetwork.ConnectUsingSettings();
//После чего игра подключается и ожидает достаточное число игроков.

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


рассылать сообщения между участниками, постоянно передавая информацию
между ними:
//С помощью атрибутов выбираются нужные игроки, и для них отправляются определённые
сообщения
options = new RaiseEventOptions { TargetActors = new[] {player.ActorNumber } };
sendOptions = new SendOptions { Reliability = true };
PhotonNetwork.RaiseEvent(13, directions, options, sendOptions);
PhotonNetwork.RaiseEvent(15, data, options, sendOptions);

Таким образом, Photon значительно упрощает взаимодействие игроков,


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

3.3 Разработка компьютерной игры


При разработке игры Unity сильно упрощает множество вещей. В нем
существует множество возможностей и несколько рабочих полей: Структура
сцен и структура проекта.

22
На рисунке 3.4 представлена структура сцен.

Рисунок 3.4 – Структура сцен.


На сцене показательно видно, где расположены какие элементы и какой
приоритет они занимают. Чем выше находится объект по иерархии, тем
быстрее он отрисовывается и тем самым при нахождении двух объектов в
одном месте более высокий объект в списке будет находится поверх другого.
Так же структура сцен позволяет упростить работу с зависимостями в сцене и в
основном поэтому «Drag&Drop» интерфейс в Unity такой удобный.
На Рисунке 3.8 показано дерево проекта со всеми составляющими.

Рисунок 3.5 – Структура проекта.


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

23
 Standart Assets – Папка, в которой хранятся ассеты из AssetStore, которые
либо слишком сложные, чтобы распределять их по другим папкам, либо
работают только вместе.
 Prefabs – Место, где хранятся префабы, в основном все они хранятся
здесь, но при наличии фрейморка Photon для работы некоторых функции
требуется следующая папка.
 Resources – Именно здесь находится префабы, которые используются в
мультиплеере, или точнее те объекты, которые нужно синхронизировать,
к примеру префаб игрока.
 Scripts – Основная папка, т.к. тут расположены скрипты, которые
отвечают за работу большей части игры. Так же иногда возможно
наличие папки Interfaces внутри.
Это не все, но одни из самых главных типов, без которых структура
проекта будет считаться некачественной.
Главное окно программы – это сцена с названием «Menu». Из этого
уровня идет переход к окну мультиплеера, откуда может быть переход к сцене
«Game» или кнопке «Выйти из игры».
На рисунке 3.6 представлена визуальная форма сцены «Menu».

Рисунок 3.6 – Сцена «Menu»

Для сцены «Menu» используются C# скрипт – «MenuManager». Он


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

24
Сама cцена состоит из одного поля и игровой зоны, на которой
происходит игра (рисунок 3.7).

Рисунок 3.7 – Игровое поле

Для самой игры используются множество скриптов – GameManager,


BoardManager, PlayerController, LobbyManager, SyncData и многие другие
(см. Приложение А).
Для примера, LobbyManager отвечает за подключение и синхронизации
клиентов между собой, позволяет подключаться, менять настройки Photon и
управляет созданием лобби. Именно этот скрипт создаёт и присоединяет
игроков в комнаты.

//C помощью функции берется имя игрока, сохраняется и после этого создаёт комнату
public void CreateRoom()
{
PhotonNetwork.NickName = nickNameInput.text;
PlayerPrefs.SetString("NickName", nickNameInput.text);
PhotonNetwork.CreateRoom(null, new Photon.Realtime.RoomOptions { MaxPlayers
=20 ,CleanupCacheOnLeave =false});
Log("Created the Room");
}

GameManager – отвечает за взаимодействие игроков во время игры,


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

25
// При вызове различных данных здесь обрабатываются данные и рассылаются по игрокам
public void OnEvent(EventData photonEvent)
{
switch (photonEvent.Code)
{
case 13:
directions = (Vector2Int[]) photonEvent.CustomData;
PerformTick(directions);
break;
case 15:
var data = (SyncData)photonEvent.CustomData;
StartCoroutine( OnSyncDataReceived(data));
break;
}
}

MessageGenerator – вместе с несколькими скриптами отвечает за диалоги


в игре и их функционал.
PlayerController – управление персонажем и взаимодействие с полем;

// При наличии игрока как главного и не мертвого, он может передвигаться


if (photonView.IsMine && !isDead)
{
HandleInput();
}
if (direction == Vector2Int.left) { spriteRenderer.flipX = true; }
if (direction == Vector2Int.right) { spriteRenderer.flipX = false; }

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


при помощи обрушивания их вниз. Ходы идут через определенные интервалы,
что позволяет сократить влияние задержки до минимума.
При разработке использовались корутины, внутренние функции такие как
Awake(), SceneManager, Start() и т.д.

3.4 Разработка дизайна


Разработка дизайна – это самая сложная и важная стадия разработки
приложения. Графика игры должна быть привлекательна для игрока, чтобы
завлечь его поинтересоваться разработкой. А так как это игра представляет
жанр HYPER-CASUAL, то дизайн должен быть максимально привлекательным
и затягивающим.
Для игры «Mine&Slay» были использованы различные графические
изображения, заимствованные из различных интернет-источников и
нарисованные во встроенном графическом редакторе Unity, так же некоторые
спрайты были созданы собственноручно.
Дизайн главного окна, где находится сцена «Menu», использовались такие
вещи как: фоновая картинка, кнопки для перехода в другие сцены или окна, а

26
также фоновая музыка. Фон и музыка были найдены в интернете. Кнопки
переходов выполнены в стиле встроенного редактора Unity с пиксельным
шрифтом (рисунок 3.8).

Рисунок 3.8 – Пример кнопок перехода

Для сцены «Game» использовались модельки, выполненные в стиле Pixel


Art. Как для игрока, так и для врагов используется набор моделей, который
меняются между собой.
Окно игры состоит из квадратных полей, называемыми Tile –
особенность Unity, позволяющая создавать карты довольно просто. Так
называемые тайлы вместе образуют Tilemap, наложенные в несколько слоев
они создают полную и качественную картинку. Преимущество перед
обычными спрайтами в том, что у Tilemap гораздо легче настраивается, проще
синхронизируется с другими игроками.
Так же для получения особых типов тайлов необходимо установить
библиотеку под названием «2d-extras», которая предоставляется самой
командой разработчиков Unity.
Помимо различных возможностей, которые предлагает эта библиотека, в
ней есть несколько дополнительный тайлов, а именно она обладает особыми
типами тайлов: RuleTile и RandomTile.
RandomTile позволяет при генерации тайла определять, какой он будет
случайным образом, выбирая из заранее составленного списка. Таким образом
можно разнообразить
карту различным
окружением, или как в
нашем случае карту.
Отличие RuleTile от
обычного в том, что его
возможно настраивать
так, что при создании тайла
на карте RuleTile сам
определяет, как он должен
располагаться относительно
других. (рисунок 3.9)

27
Рисунок 3.9 – пример RuleTile

В итоге получается бесшовная картинка, которая будет выглядеть такой


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

Рисунок 3.10 – Различные текстуры земли

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


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

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

29
ГЛАВА 4
ОПИСАНИЕ ИГРЫ

4.1 Программно-аппаратные ресурсы


В процессе работы использовались следующие технические средства:
ноутбук Acer Aspire VX-15;
Параметры ноутбука Acer Aspire VX-15;
процессор AMD Ryzen 7 3750H 2300 МГц;
оперативная память 16Gb;
графический адаптер NVIDIA GeForce RTX 2060 6 ГБ;
видеоадаптер Intel(R) HD Graphics 3000;
локальная видеопамять 1Gb;
жесткий диск Samsung на 1000Gb;
SSD Crusial 512Gb;
монитор 15,6 дюймов;
Windows 10 Pro (64 Бит).
программные средства:
Word;
Unity.
Для ознакомление здесь указаны устройства и их характеристики, а также
программы, которые использовались в процессе игры и тестировании.

4.2 Демонстративный пример работы игры


Для работы с компьютерной игрой «Mine&Slay», необходимо сначала
собрать её в проект через File-> Build and Run (рисунок 4.1).

Рисунок 4.1 – Сборка игры

После компиляции игры она сама запустится при условии компиляции на


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

30
Рисунок 4.2 – Главное окно игры «Mine&Slay»

В главном окне имеется 3 кликабельных кнопки: «Начать игру»,


переключение музыки и «Выход» из игры. Так же на фоне играет музыка.

Рисунок 4.3 – окно старта игры

На этом уровне имеется 4 активных объекта:


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

31
Нажмём «Начать игру». После чего сначала нас сразу переключает на
игровое поле (рисунок 4.4).

Рисунок 4.4 – Начало игры


Игра начинается после подключение к лобби хотя бы ещё одного игрока,
после чего игра начинается, для этого нужно уничтожить всех других игроков
путем становления под них. После уничтожения всех игроков игра
заканчивается и выходит в лобби.
На рисунке 4.5 показаны моделька игрока и обычного стражника.

Рисунок 4.5
– Модели игроков

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

32
На картинке представлена примерная середина партии в ранней
версии(рисунок 4.5)

Рисунок 4.5 – Разгар битвы


Также во время игры имеется возможность выйти в меню заранее без
окончания игры. С помощью кнопки «Leave» вас сразу выкидывает в главное
меню. Таким образом получилась игра, которая позволяет весело провести
время, незатейлива, чем полностью подтверждает свой жанр HYPER-CASUAL.
4.3 Тестирование
Когда разработка заканчивается, начинается этап тестирования,
призванный проверить игру на работоспособность и отсутствие багов, чтобы в
конце концов получился полноценный продукт.
Для того, чтобы протестировать игру существует множество видов
различных тестирований. Но в большинстве случаев используется вид
тестирования, называемый «Нагрузочным тестированием». Суть этого метода
заключается в том, что мы пытаемся выявить все уязвимости в игре путем
прохода по всем основным пунктам игры, и проверка их на работоспособность.
Обычно одного раза пройти игру недостаточно, поэтому часто присутствует
необходимость в нескольких повторных прохождениях, т.к. баги не всегда
можно обнаружить с первого раза.
Но также тестирование проводится и во время разработки самой игры,
так как функционал постоянно проверяется и часто несоответствия выявляются
ещё во время написания кода, поэтому большая часть багов исправляется на
данном этапе.
В процессе тестирования использовались различные виды оного, от
позитивного – когда игрок выполняет цели игры и не пытается играть «не по

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

Рисунок 4.6 – Фиксирование неправильной работы игры «Mine&Slay»

Проблема заключалась в неправильном размере персонажа из-за чего он


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

34
ЗАКЛЮЧЕНИЕ
В итоге в ходе выполнения дипломной работы было создана полноценная
компьютерная игра, путем изучения основ движка Unity. Было поставлено и
решено множество задач:
Построена иерархия проекта;
Определён тип игры, её жанр и требуемые функции;
Созданы несколько диаграмм для отображения задач игры;
Сделано сравнение движков и выбор наиболее подходящего для создания
игры;
Создан сначала в теории мультиплеер, потом реализован на практике
В первой главе мы рассмотрели предметную область и были определены
цели и задачи.
Во второй главе рассматривались различные игровые движки и был
проведен анализ на выбор наиболее подходящего. В итоге был выбран движок
Unity. Так же были рассмотрены возможные типы решений и их аналогов, в
следствие чего был выбран фреймворк Photon.
Во время третьей главы была проведена установка необходимых
плагинов и настройка движка, а также была создана полноценная игра
В четвертой главе были продемонстрированы функционал и итоговая
игра, а также проведено тестирование.
В итоге получилась полноценная игра, которая может использоваться как
полноценный готовый продукт.

35
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ:

1. Свободная энциклопедия Википедия https://ru.wikipedia.org.


2. Игровой движок Unity. https://unity3d.com/ru/get-unity/download.
3. Документация для Unity.
ttps://docs.unity3d.com/ru/current/Manual/index.html
4. Документация Photon https://doc.photonengine.com/en-
us/realtime/current/getting-started/realtime-intro

36
ПРИЛОЖЕНИЕ А

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


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

Часть скрипта Board Manager

Один из таких скриптов – Board Manager, который в связке с другими


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

37
Этот скрипт следит за выполнением передвижения, привязке игрока к своему
персонажу, и в случае смерти за отключение персонажа

Так же для синхронизации данных и сжимании данных для того, чтобы


уменьшить задержку между игроками

38
39
Так же для создания лобби и управлению его ошибками в случае
неправильного подключения используется LobbyManager

40

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