Определения 8
Введение 10
1. Анализ подходов к организации архитектуры игры. 12
1.1. Важность архитектуры при разработке игр 12
1.2. ECS 12
1.2.1. Общие сведения 12
1.2.2. Преимущества и недостатки 13
1.3. Паттерны MVC, MVP, MVVM 14
1.3.1. Общие сведения 15
1.3.2. Применение в разработке игр 15
1.3.3. Выводы 15
1.4. Inversion of Control и Dependency Injection 16
1.4.1. Общие определения 16
1.4.2. Принцип работы 16
1.4.3. Преимущества и недостатки 17
1.5. Выбор архитектуры 18
2. Изучение сетевого взаимодействия в многопользовательских играх. 19
2.1. Peer-to-Peer (P2P) 19
2.2. Выделенный сервер 20
2.3. Клиент-хост 21
3. Изучение существующих средств для сетевого взаимодействия на движке Unity 22
3.1. Netcode for GameObjects от Unity 22
3.2. Fusion от Photon 24
4. Разработка базовых механик игры 25
4.1. Необходимые механики 25
4.2. Выбор средств разработки 25
4.3. Использование инструментов Unity 26
4.4. Реализация механик 26
4.4.1. Обработка ввода игрока 26
4.4.2. Управление персонажем и камерой 28
4.4.3. Стрельба и попадание 31
5. Реализация сетевого взаимодействия 33
5.1. Netcode for GameObjects 33
5.1.1. Основные компоненты 33
5.1.2. Подключение 34
5.1.3. Возникшие проблемы 35
5.2. Photon Fusion 36
5.2.1. Основные компоненты Photon 36
5.2.2. Обработка ввода 37
5.2.3. Разработка механики здоровья и получения урона 40
5.2.4. Выводы 41
6. Организация архитектуры проекта в Unity 42
6.1. Использование VContainer 42
6.2. Способы внедрения зависимостей 43
6.3. Конечный вид архитектуры 44
Заключение 46
Список использованных источников 47
На протяжении последних нескольких лет игровая индустрия является одной из наиболее прибыльных и быстрорастущих индустрий развлечений в мире, обгоняя по годовому доходу кинопрокат и музыкальный бизнес [1].Для создания успешных видеоигр необходима команда из высококвалифицированных специалистов, в их числе игровые программисты и разработчики, в чьи обязанности входит разработка различных аспектов игры: игровые механики, интеграция графики и звукового сопровождения, программирование пользовательского интерфейса, сетевые коммуникации и т.д. Благодаря разработчикам игровые миры могут существовать и функционировать.
В качестве темы выпускной квалификационной работы была выбрана разработка прототипа многопользовательской соревновательной игры. В целях разработки используется игровой движок Unityот компании UnityTechnologies.Прототип помогает сформировать четкое видение будущего проекта на ранних стадиях разработки и, в отличие от финальной сборки, необязательно должен быть идеальным в исполнении, поэтому его производство менее затратное.
В игре предполагается состязание игроков друг с другом с целью одержать верх над противником, будь то другой игрок или вражеская команда. Сеттинг – Средневековье с элементами фэнтези. В прототипе должен быть реализован персонаж-лучник.
Целью ВКР является разработка и отладка игрового прототипа многопользовательской игры. Для достижения данной цели были поставлены следующие задачи:
1. Анализ подходов к организации архитектуры игры
2. Изучение типов сетевого взаимодействия в многопользовательских играх
3. Изучение средств для разработки сетевого взаимодействия на игровом движке Unity
4. Разработка основных механик игры
5. Реализация сетевого взаимодействия в игре
6. Организация архитектуры проекта в Unity
По окончанию работы подразумевается, что разработанный прототип можно будет протестировать с разных устройств, подключившись к одной игровой комнате. В рамках выполнения поставленных задач изучены и применены на практике инструменты движка Unity, архитектурные паттерны и принципы программирования, сетевое взаимодействие в играх и инструменты для его реализации. Полученных знаний и навыков будет достаточно, чтобы считаться начинающим игровым разработчиком на Unity.
В рамках данной работы была достигнута основная цель, заключающаяся в разработке и отладке прототипа многопользовательской соревновательной игры.
Были освоены основные архитектурные приемы и паттерны. При помощи современных инструментов игрового движка Unityбыли разработаны основные игровые механики с поправкой на сетевую составляющую. Были проанализированы и протестированы на практике два инструмента для реализации сетевого взаимодействия в Unity, был аргументирован выбор конечного инструмента. Также была спроектирована и разработана гибкая и качественная архитектура, отвечающая требованиям проекта.
При создании проекта был получен опыт построения игровой архитектуры и разработки сетевой составляющей многопользовательской игры.
Таким образом выбор используемых технологий и архитектуры позволил получить игровой прототип, в который можно поиграть с разных устройств. Также проект в дальнейшем можно будет поддерживать и развивать. Можно разработать новые механики и персонажей, заняться добавлением контента, визуальной и звуковой составляющей.
1. Are You Not Entertained? [Электронный ресурс], https://www.statista.com/chart/22392/global-revenue-of-selected-entertainment-industry-sectors/
2. GameProgrammingPatterns, Роберт Нистром [Электронный ресурс], https://gameprogrammingpatterns.com/
3. Расширяемая и удобная в сопровождении архитектура игр на Unity, 2020 [Электронный ресурс], https://habr.com/ru/company/otus/blog/530056/
4. Официальные обучающие материалы Unity[Электронный ресурс], https://docs-multiplayer.unity3d.com/, https://docs.unity.com/, https://docs.unity3d.com/
5. Учебный проект BossRoomот Unity[Электронный ресурс], https://github.com/Unity-Technologies/com.unity.multiplayer.samples.coop#testing-multiplayer
6. Документация и обучающие материалы PhotonFusion [Электронный ресурс], https://doc.photonengine.com/fusion/current/getting-started/fusion-intro
7. Документация VContainer [Электронный ресурс], https://vcontainer.hadashikick.jp/