Академический Документы
Профессиональный Документы
Культура Документы
МЕХАНИКО-МАТЕМАТИЧЕСКИЙ ФАКУЛЬТЕТ
КОЗАК
Дмитрий Владимирович
Дипломная работа
Научный руководитель:
старший преподаватель
Политаев Дмитрий
Николаевич
Допущен к защите
«___»___________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
ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ
3
РЕФЕРАТ
4
РЕФЕРАТ
5
ABSTRACT
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.
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
ПОСТАНОВКА ЗАДАЧ
9
Для разработчика, модель данных поможет увидеть структуру
приложения, понять, как оно должно работать и какие части стоит оставить, а
какие будут не нужны.
Так же для определения всех возможностей игры лучше всего подойдет
логическая модель, так как она поможет визуально связать всё воедино и
понять связь между компонентами, которые в итоге будут собраны в единую
игру -«Mine&Slay».
В итоге была создана логическая модель игры «Mine&Slay», которая
предоставлена ниже (рисунок 1.1.).
Главное меню
Управление
Ввод имени
персонажем
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)
Вход в игру
Нахождение лобби/
Создание лобби
Управление персонажем
Пользователь
Выход
из игры
12
ГЛАВА 2
ОБЗОР ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ,
ИСПОЛЬЗУЕМЫХ ПРИ СОЗДАНИИ ИГРОВОГО
ПРИЛОЖЕНИЯ
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 является очень хорошим инструментом
для реализации игры, которые позволяет реализовать все задумки и подходит
для разработки лучше остальных.
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
ПРАКТИЧЕСКАЯ ЧАСТЬ
20
Рисунок 3.3 – Новый созданный проект
21
3.2 Описание возможностей фрейморка Photon
Photon – фреймворк, который предоставляет большие возможности в
создание мультиплеерных проектов и их поддержке. Он сочетает в себе
небольшую сложность в реализации и эффективность решения в итоге. Так же,
в отличие от множества других фреймворков, у Photon очень гибкая ценовая
политика, позволяющая использовать как бесплатные версии, так и
приобретать более затратные и масштабные варианты. У него само по себе
большое количество плюсов, а именно:
легкое масштабирование сервера, а именно при увеличении количества
игроков Photon без проблем адаптируется;
кроссплатформенность, позволяющая игрокам играть с разных устройств
вместе, что увеличивает охват аудитории;
по сравнению с остальными решениями рабочий матчмейкинг.
Подключение осуществляется с помощью встроенного класса –
PhotonNetwork, который и отвечает за большую часть вещей в данном
фреймворке. По примеру ниже показано подключение к серверу:
//После создания лобби подключаемся к серверу.
PhotonNetwork.AutomaticallySyncScene = true;
PhotonNetwork.GameVersion = "1";
PhotonNetwork.ConnectUsingSettings();
//После чего игра подключается и ожидает достаточное число игроков.
22
На рисунке 3.4 представлена структура сцен.
23
Standart Assets – Папка, в которой хранятся ассеты из AssetStore, которые
либо слишком сложные, чтобы распределять их по другим папкам, либо
работают только вместе.
Prefabs – Место, где хранятся префабы, в основном все они хранятся
здесь, но при наличии фрейморка Photon для работы некоторых функции
требуется следующая папка.
Resources – Именно здесь находится префабы, которые используются в
мультиплеере, или точнее те объекты, которые нужно синхронизировать,
к примеру префаб игрока.
Scripts – Основная папка, т.к. тут расположены скрипты, которые
отвечают за работу большей части игры. Так же иногда возможно
наличие папки Interfaces внутри.
Это не все, но одни из самых главных типов, без которых структура
проекта будет считаться некачественной.
Главное окно программы – это сцена с названием «Menu». Из этого
уровня идет переход к окну мультиплеера, откуда может быть переход к сцене
«Game» или кнопке «Выйти из игры».
На рисунке 3.6 представлена визуальная форма сцены «Menu».
24
Сама cцена состоит из одного поля и игровой зоны, на которой
происходит игра (рисунок 3.7).
//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");
}
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;
}
}
26
также фоновая музыка. Фон и музыка были найдены в интернете. Кнопки
переходов выполнены в стиле встроенного редактора Unity с пиксельным
шрифтом (рисунок 3.8).
27
Рисунок 3.9 – пример RuleTile
28
В итоге получилась игра, которая не требовательна к ресурсам, но при
этом выглядящая вполне современно, что позволит получить больший охват
аудитории.
29
ГЛАВА 4
ОПИСАНИЕ ИГРЫ
30
Рисунок 4.2 – Главное окно игры «Mine&Slay»
31
Нажмём «Начать игру». После чего сначала нас сразу переключает на
игровое поле (рисунок 4.4).
Рисунок 4.5
– Модели игроков
Первый –
это моделька игрока, вторая моделька – моделька всех остальных игроков.
В игре реализована возможность передвижения по локации и
уничтожения блоков.
32
На картинке представлена примерная середина партии в ранней
версии(рисунок 4.5)
33
правилам» и наоборот, негативное, когда игрок делает всё что угодно, но не то
что по сути нужно. Оба вида важны, так как поведение пользователя тяжело
предугадать, и поэтому желательно чтобы игра была наиболее совершенна с
точки зрения механики.
Тестирование игры происходило как на ноутбуке, так и на телефоне. В
ходе разработки было выявлено много багов и неисправностей, которые
мешали полноценному игровому процессу. От пропадающих юнитов до
сломанной механики персонажа. Как пример найденной ошибки представим
на рисунке 4.6.
34
ЗАКЛЮЧЕНИЕ
В итоге в ходе выполнения дипломной работы было создана полноценная
компьютерная игра, путем изучения основ движка Unity. Было поставлено и
решено множество задач:
Построена иерархия проекта;
Определён тип игры, её жанр и требуемые функции;
Созданы несколько диаграмм для отображения задач игры;
Сделано сравнение движков и выбор наиболее подходящего для создания
игры;
Создан сначала в теории мультиплеер, потом реализован на практике
В первой главе мы рассмотрели предметную область и были определены
цели и задачи.
Во второй главе рассматривались различные игровые движки и был
проведен анализ на выбор наиболее подходящего. В итоге был выбран движок
Unity. Так же были рассмотрены возможные типы решений и их аналогов, в
следствие чего был выбран фреймворк Photon.
Во время третьей главы была проведена установка необходимых
плагинов и настройка движка, а также была создана полноценная игра
В четвертой главе были продемонстрированы функционал и итоговая
игра, а также проведено тестирование.
В итоге получилась полноценная игра, которая может использоваться как
полноценный готовый продукт.
35
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ:
36
ПРИЛОЖЕНИЕ А
37
Этот скрипт следит за выполнением передвижения, привязке игрока к своему
персонажу, и в случае смерти за отключение персонажа
38
39
Так же для создания лобби и управлению его ошибками в случае
неправильного подключения используется LobbyManager
40